python 之 數據庫(創建表的完整語法、基本數據類型)

10.4 創建表的完整語法

create table 表名(
字段名1 類型[(寬度) 約束條件],
字段名2 類型[(寬度) 約束條件],
字段名3 類型[(寬度) 約束條件]
);
#類型:使用限制字段必須以什麼樣的數據類型傳值
#約束條件:約束條件是在類型之外添加一種額外的限制

注意:

1、在同一張表中,字段名不能重複 2、寬度和約束條件可選,字段名和類型是必須的 3、最後一個字段后不加逗號

10.5 基本數據類型

10.51 整型類型

1、作用:id號,各種號碼,年齡,等級 2、分類:tinyint   int   bigint

3、默認整型都是有符號的

#tinyint:小整數值(1字節)  範圍(有符號):(-128,127)  範圍(無符號):(0,255)
create table t1(id tinyint);
insert into t1 values(-10),(128),(-129);    # id -10 127 -128create table t2(id tinyint unsigned);       # 無符號的
insert into t2 values(-1),(256);            # id 0 255
​
#int:大整數值(4字節)  範圍(有符號):(-2147483648,2147483647)    範圍(無符號):(0,4294967295)
create table t3(x int unsigned);
insert into t3 values(4294967296);          # x 4294967295create table t4(x int(12) unsigned);        #显示寬度12     #显示寬度,並非存儲寬度
insert into t4 values(4294967296123);       # x 4294967295

4、強調:對於整型來說,數據類型后的寬度並不是存儲限制,而是显示限制,所以在創建表示,如果字段採用的是整型類型,完全無需指定显示寬度,默認的显示寬度,足夠显示完整當初存放的數據

显示時,不夠8位用0填充,如果超出8位則正常显示

create table t5(x int(8) unsigned zerofill);
insert into t5 values(4294967296123);       # x  4294967295
insert into t5 values(1);                  # x  00000001

10.52 修改sql_mode

# 查看sql_mode
mysql> show variables like "%sql_mode%";
+----------------------------+---------------------+
| Variable_name              | Value               |
+----------------------------+---------------------+
| sql_mode                  NO_ENGINE_SUBSTITUTION |
+----------------------------+---------------------+
​
#修改sql_mode為嚴格模式:在該模式下,如果插入的數據超過限制,則會立即報錯
mysql> set global sql_mode="strict_trans_tables";

10.53 浮點型

作用:存儲身高、體重、薪資 分類:float double decimal 相同點: 對於三者來說,都能存放30位小數, 不同點: 1、精度的排序從低到高:float, double, decimal 2、float與double類型能存放的整數位比decimal更多

create table t9(x float(255,30));   #255最大總數位   30最大小數位
create table t10(x double(255,30));
create table t11(x decimal(65,30)); #65最大總數位    30最大小數位
​
insert into t9 values(1.111111111111111111111111111111);
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);
​
mysql> select * from t9;
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
​
mysql> select * from t10;
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
​
mysql> select * from t11;
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+

10.54 字符類型

作用:姓名,地址,描述類的信息

分類:char 定長 varchar 變長

強調:字符的寬度限制單位是字符個數

create table t12(x char(4));            # 超出4個字符則報錯,不夠4個字符則用空格補全成4個字符
create table t13(y varchar(4));         # 超出4個字符則報錯,不夠4個字符那麼字符有幾個就存幾個
​
insert into t12 values('hello');        #報錯
insert into t13 values('hello');        #報錯
​
insert into t12 values('a'); #'a    '   看不到空格,需要設置sql_mode
insert into t13 values('a'); #'a'set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";# char_length(x)显示字段x對應的長度
select char_length(x) from t12; #4
select char_length(y) from t13; #1

注意:

針對char類型,mysql在存儲時會將數據用空格補全存放到硬盤中,但會在讀出結果時自動去掉末尾的空格,但兩種情況不同:

mysql> select * from t14 where name="lxx";      # name字段明確地等於一個值,該值后填充空格是沒有用
mysql> select * from t14 where name like "lxx__";  # name字段模糊匹配一個值,該值后填充空格是有用的

對比char與varchar:

name char(5) 缺點:浪費空間 優點:存取速度都快 egon_ alex_ lxx__ wxx__ yx___

ame varchar(5) 缺點: 存取速度都慢 優點: 節省空間 (1bytes+egon)(1bytes+alex)(1bytes+lxx)(1bytes+wxx)(1bytes+yx)

10.55 日期類型

作用:時間相關

分類:date:1999-01-27 time: 11:11:11 datetime:1999-01-27 11:11:11 year:1999

create table student(
    id int,
    name char(16),
    born_year year,
    birth date,
    class_time time,
    reg_time datetime
);
insert into student values(1,'egon','2000','2000-01-27','08:30:00','2013-11-11 11:11:11');
mysql> select * from student;
+------+------+-----------+------------+------------+---------------------+
| id   | name | born_year | birth      | class_time | reg_time            |
+------+------+-----------+------------+------------+---------------------+
|    1 | egon |      2000 | 2000-01-27 | 08:30:00   | 2013-11-11 11:11:11 |
+------+------+-----------+------------+------------+---------------------+

10.56 枚舉與集合類型

作用與分類:枚舉enum:多選一個 集合set:多選多(也可多選一)

create table teacher(
    id int,
    name char(16),
    sex enum('male','female','others'),
    hobbies set('play','read','music','piao')
);
insert into teacher values(1,'egon','male','play,piao');
select * from teacher;
+------+------+------+-----------+
| id   | name | sex  | hobbies   |
+------+------+------+-----------+
|    1 | egon | male | play,piao |
+------+------+------+-----------+
点赞

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *