数据约束
1.默认值
CREATE TABLE student( sid INT, sname VARCHAR(20), ssex VARCHAR(5), address VARCHAR(100) DEFAULT '山东淄博' ) INSERT INTO student(sid,sname,ssex) VALUES(1,'张三','男'); INSERT INTO student VALUES(2,'李四','男','山东济南'); SELECT * FROM student; DROP TABLE student;
设置山东淄博为默认值,没有添加值的时候默认显示山东淄博,但是如果下面字段添加了值则显示当前添加的值,允许添加值为null。
2.非空
CREATE TABLE student( sid INT NOT NULL, sname VARCHAR(20) NOT NULL, ssex VARCHAR(5) NOT NULL, address VARCHAR(100) )
3.唯一约束
CREATE TABLE student( sid INT UNIQUE, sname VARCHAR(20), ssex VARCHAR(5), address VARCHAR(20) )
唯一字段可以插入null,唯一约束对null不起作用
如果在设置了唯一的字段名中插入的字段相同,出现错误
4.主键(非空+唯一)
不能为空,只能有一个,相当于身份证
CREATE TABLE student( sid INT PRIMARY KEY, sname VARCHAR(20), ssex VARCHAR(5), address VARCHAR(20) )
如果重复或者为null ,会出现错误
5.自增长
是在主键基础上实现自增长
CREATE TABLE student( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20), ssex VARCHAR(5), address VARCHAR(20) ) INSERT INTO student(sname,ssex,address) VALUES('张三','男','山东淄博'); sid自动增长,从0开始 CREATE TABLE student( sid INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(20), ssex VARCHAR(5), address VARCHAR(20) )
零填充,当数字不满4位时,其他位数用零进行填充
Delete from student清空表的时候只删除数据,删除不了约束,当再添数据时,会出现下面的情况
TRUNCATE TABLE student;清空表的时候可以删除数据和表约束,当再次添加数据时,重新自增长
6.外键
CREATE TABLE emp( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20) NOT NULL, deptid INT CONSTRAINT fk_deptid FOREIGN KEY(deptid) 定义一个外键名 REFERENCES dept(did) )
没有设置外键的是主表,设置外键的是副表,先插入主表的数据
注意:
1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!
2)主表的参考字段通用为主键
3)添加数据: 先添加主表,再添加副表
4)修改数据: 先修改副表,再修改主表
5)删除数据: 先删除副表,再删除主表
7.级联操作
CREATE TABLE emp( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20) NOT NULL, deptid INT CONSTRAINT fk_deptid FOREIGN KEY(deptid) ON UPDATE CASCADE或者ON DELETE CASCADE 定义一个外键名 REFERENCES dept(did) )
级联修改: ON UPDATE CASCADE
级联删除: ON DELETE CASCADE
将上面语句添加后可以修改或删除数据
连接查询
- 1. 交叉连接
SELECT * FROM tb1 CROSS JOIN tb2;不建议用
- 2. 内连接
SELECT * FROM tb1 INNER JOIN tb2 ON tb1.f1=tb2.c1;用得较多
筛选条件
- 3. 左外连接
连接条件和内连接一样,内连接的结果基础上,加上左边表中所有不符合连接条件的数据,相应本应放右边表的字段的位置就自动补为“null”值。
SELECT * FROM product LEFT JOIN product_type ON product.protype_id=product_type.protype_id;
- 4. 右外连接
SELECT * FROM product right product_type ON product.protype_id=product_type.protype_id;