1. 程式人生 > >例題SQL語句詳解-資料庫基本操作7-資料型別拓展

例題SQL語句詳解-資料庫基本操作7-資料型別拓展

|

1.6 資料型別——boolean

MySQL不支援boolean型別,true和false在資料庫中對應1和0。

mysql> create table t15(
    -> field boolean
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t15 values (true),(false);   # true和false在資料庫中對應1和0
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t15;
+-------+
| field |
+-------+
|     1 |
|     0 |
+-------+
2 rows in set (0.00 sec)

1.7 關於資料型別的思考題

  1. 手機號碼一般使用什麼資料型別儲存? char
  2. 電話號碼使用什麼資料型別 varchar
  3. 性別一般使用什麼資料型別儲存? char enum
  4. 學生年齡資訊一般使用什麼資料型別儲存? tinyint
  5. 照片資訊一般使用什麼資料型別儲存? binary
  6. 薪水一般使用什麼資料型別儲存? decimal

多學一招:一個欄位到底選數字還是字元,取決於有沒有計算的可能,如果沒有計算的可能即使是數字也要用字元型別,比如手機號、QQ號,…

1.8 列屬性——是否為空(null | not null)

null:可以為空

not null:不可以為空

思考題

  1. 學員姓名允許為空嗎? 非空
  2. 家庭地址允許為空嗎? 非空
  3. 電子郵件資訊允許為空嗎? 可以為空
  4. 考試成績允許為空嗎? 可以為空

1.9 列屬性——預設值(default)

1、如果一個欄位沒有插入值,可以預設插入一個指定的值。

2、default關鍵字用來插入預設值

mysql> create table t16(
    -> id int unsigned,
    -> addr varchar(20) not null default '地址不詳'
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into t16 values (1,'北京'),(2,default);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t16;
+------+----------+
| id   | addr     |
+------+----------+
|    1 | 北京         |
|    2 | 地址不詳        |
+------+----------+
2 rows in set (0.00 sec)

1.10 列屬性——自動增長(auto_increment)

1、欄位的值從1開始,每次遞增1,特點就在欄位中的資料不可能重複,適合為記錄生成唯一的id

2、自動增長都是無符號整數。

3、在MySQL中,auto_increment必須是主鍵。但是主鍵不一定是自動增長的。

4、如果要給自動增長列插入資料,使用null關鍵字。

5、自動增長列上的資料被刪除,預設情況下此記錄的編號不再使用。 在這裡插入圖片描述

1.11 列屬性——主鍵(primary key)

主鍵:唯一標識表中記錄的一個或一組列

主鍵的特點:不能重複,不能為空

一個表只能有一個主鍵,主鍵可以有多個欄位組成。

主鍵的作用:

1、 保證資料完整性

2、 加快查詢速度

1.11.1 新增主鍵

方法一:建立表的時候新增主鍵

mysql> create table t17(
    -> id varchar(5) primary key,   # 建立主鍵
    -> name varchar(10) not null
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t17 values ('s2531','tom'),('s2532','berry');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t17;
+-------+-------+
| id    | name  |
+-------+-------+
| s2531 | tom   |
| s2532 | berry |
+-------+-------+
2 rows in set (0.00 sec)

# 如果插入主鍵相同資料會報錯
mysql> insert into t17 values ('s2531','tom');
ERROR 1062 (23000): Duplicate entry 's2531' for key 'PRIMARY'

# 主鍵不能插入null值
mysql> insert into t17 values (null,'tom');
ERROR 1048 (23000): Column 'id' cannot be null

方法二:建立表的時候新增主鍵

mysql> create table t18(
    -> id int,
    -> name varchar(10),
    -> primary key(id)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> desc t18;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | 0       |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

方法三:更改表的時候新增主鍵

mysql> create table t20(
    -> id int,
    -> name varchar(10)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> alter table t20 add primary key (id);   # 更改表新增主鍵
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t20;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | 0       |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)