数据类型
整型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| # 常见数据类型
# 一,整型
# 1. 如何设置无符号和有符号 DROP TABLE IF EXISTS tab_int; CREATE TABLE tab_int( t1 INT, t2 INT UNSIGNED, t3 INT(8), t4 INT(5) ZEROFILL ); INSERT INTO tab_int VALUES(-15498,45454,-445,123);
DESC tab_int; SELECT* FROM tab_int;
# 二,小数
DROP TABLE IF EXISTS tab_float; CREATE TABLE tab_float( f1 FLOAT(5,2), f2 DOUBLE(5,2), f3 DECIMAL(5,2) );
INSERT INTO tab_float VALUES(123.45,123.45,123.45); # 能够正常插入 INSERT INTO tab_float VALUES(123.4,123.4,123.4); # D表示的含义就是小数点保留位数,不足会自动补全,超出会四舍五入 INSERT INTO tab_float VALUES(123.456,123.456,123.456); INSERT INTO tab_float VALUES(1234.45,1234.45,1234.45); # M表示的是小数点和整数位数的和,小数为是2,所以整数位最多只能是3,所以超过后用最大值999.99代替
# 选择类型的原则
|
字符型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| # 串数据(文本类型+二进制数据)
DROP TABLE IF EXISTS tab_char; CREATE TABLE tab_char( c1 ENUM('a','b','c','d') # 枚举类型,同样是字符型,只能插入枚举的内容 # 不区分大小写 ); INSERT INTO tab_char VALUES('a');
# SET类型类似枚举类型,但是能一次向一个单元插入多个值 # 同样不区分大小写 DROP TABLE IF EXISTS tab_set; CREATE TABLE tab_set( s1 SET('a','b','c','d') ); INSERT INTO tab_set VALUES('a'); INSERT INTO tab_set VALUES('b'); INSERT INTO tab_set VALUES('a,b,c');
|
日期型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # 日期型
DROP TABLE IF EXISTS tab_date; CREATE TABLE tab_date( t1 DATETIME, t2 TIMESTAMP ); INSERT INTO tab_date VALUES(NOW(),NOW());
SELECT * FROM tab_date;
SHOW VARIABLES LIKE 'time_zone'; # 显示当前时区 SET time_zone='+9:00'; # 修改当前时区,可以看到修改完时区后,TIMESTAMP数据跟随时区变化,DATETIME数据不变化
|
常见约束介绍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| # 常见的约束介绍
# 创建表时添加约束
# 创建列级约束
CREATE DATABASE students; USE students; CREATE TABLE stu_info( id INT PRIMARY KEY, # 添加主键约束 stuName VARCHAR(20) NOT NULL, # 非空约束 gender CHAR(1) CHECK(gender='男' OR gender='女'), # 检查约束,在Mysql中没有效果 seat INT UNIQUE, # 唯一约束 age INT DEFAULT 18, # 默认约束 majorID INT REFERENCES major(id) # 外键约束,没有实际效果 );
CREATE TABLE major( id INT PRIMARY KEY, majorName VARCHAR(20) );
# 查看stuinfo表中所有的索引,包括主键,外键,唯一 SHOW INDEX FROM stu_info;
# 添加表级约束
DROP TABLE IF EXISTS stu_info; CREATE TABLE stu_info( id INT, stuName VARCHAR(20) , gender CHAR(1) , seat INT , age INT , majorID INT, CONSTRAINT pk PRIMARY KEY(id), # 主键 CONSTRAINT uq UNIQUE(seat), # 唯一键 CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) # 外键 );
# 主键和唯一键的区别
# 外键
# 修改表时添加约束
DROP TABLE IF EXISTS stu_info; CREATE TABLE stu_info( id INT, stuName VARCHAR(20) , gender CHAR(1) , seat INT, age INT , majorID INT );
# 用列级约束修改 # 与直接修改表的格式一样,都是重新定义表的类型然后直接再后面增加约束即可 ALTER TABLE stu_info MODIFY COLUMN stuName VARCHAR(20) NOT NULL;
# 主键和唯一键等还可以用表级约束修改 ALTER TABLE stu_info ADD PRIMARY KEY(id); ALTER TABLE stu_info ADD UNIQUE(id);
# 外键只有用表记约束才有效果 ALTER TABLE stu_info ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);
# 修改表时删除约束 # 删除列级约束仍然向上面修改时一样,只需要不写,或者用NULL代替即可 # 修改表级约束需要用到DROP关键字 ALTER TABLE stu_info DROP PRIMARY KEY; ALTER TABLE stu_info DROP INDEX seat; # 删除外键 ALTER TABLE stu_info DROP FOREIGN KEY fk_stuinfo_major;
|
设置级联更新/级联删除
添加外键时在最后加上ON UPDATE CASCADE
, ONDELETE CASCADE