实体完整性(主键约束 唯一约束 自增长)
域完整性 (非空约束 默认值约束)
引用完整性(外键约束)
约束
主键约束
主键约束:
被主键约束所约束起来的字段,该字段中的数据不能为NULL,不能重复[非空,唯一]
注意:每张表中只能有一个主键约束
DROP TABLE dept;
- 在创建表的时候,添加主键约束
CREATE TABLE dept(
deptno INT PRIMARY KEY, – 给deptno字段添加主键约束
dname VARCHAR(10),
address VARCHAR(100)
);
INSERT INTO dept VALUES(20,‘研究部x’,‘达拉斯’); – 添加成功,因为不违反主键约束的规则
INSERT INTO dept VALUES(20,‘研究部x’,‘达拉斯’); – 添加失败,因为20重复 - 删除主键约束
ALTER TABLE dept DROP PRIMARY KEY; - 给已经创建完毕的表设置主键约束
ALTER TABLE emp CHANGE empno empno INT(11) PRIMARY KEY; - 主键自增
DROP TABLE dept;
CREATE TABLE dept(
deptno INT PRIMARY KEY AUTO_INCREMENT, – 给deptno字段添加主键约束
dname VARCHAR(10),
address VARCHAR(100)
); - 0和null使用自增长得值
INSERT INTO dept VALUES(0,‘研究部x’,‘达拉斯’);
INSERT INTO dept VALUES(null,‘研究部x’,‘达拉斯’);
INSERT INTO dept (dname,address) VALUES(‘研究部x’,‘达拉斯’); - 具体值则使用具体值
INSERT INTO dept VALUES(999,‘研究部x’,‘达拉斯’);
唯一约束
被唯一约束的字段,值不能重复.
DROP TABLE dept; - 在创建表的时候,添加唯一约束
CREATE TABLE dept(
deptno INT PRIMARY KEY, – 给deptno字段添加主键约束
dname VARCHAR(10) NOT NULL,-- 给DNAME字段添加非空约束,
address VARCHAR(100) UNIQUE NOT NULL – 给address添加唯一和非空约束
); - 删除唯一约束:唯一约束是索引的一种,所以用删除索引的语法删除唯一约束。
ALTER TABLE dept DROP INDEX address;
或者
ALTER TABLE emp CHANGE empno empno INT(11)。 - 给已经创建好的表添加唯一约束
ALTER TABLE dept CHANGE dname dname VARCHAR(10) NOT NULL UNIQUE;
非空约束
被非空约束的字段,值不能为NULL
DROP TABLE dept; - 在创建表的时候,添加非空约束
CREATE TABLE dept(
deptno INT PRIMARY KEY, – 给deptno字段添加主键约束
dname VARCHAR(10) NOT NULL,-- 给DNAME字段添加非空约束,
address VARCHAR(100)
);
INSERT INTO dept VALUES(10,‘xxx’,‘达拉斯’); – 成功
INSERT INTO dept VALUES(20,‘YYY’,‘达拉斯’); – 成功
INSERT INTO dept VALUES(30,NULL,‘达拉斯’); --失败,因为违反非空约束
- 删除非空约束
ALTER TABLE dept CHANGE dname dname VARCHAR(10); - 给已经创教好的表添加非空约束
ALTER TABLE dept CHANGE dname dname VARCHAR(10) NOT NULL;
默认值
设置了默认值约束的字段,如果不赋值则使用默认值
DROP TABLE dept; - 在创建表的时候,添加默认值约束
CREATE TABLE dept(
deptno INT PRIMARY KEY, – 给deptno字段添加主键约束
dname VARCHAR(10) NOT NULL,-- 给DNAME字段添加非空约束,
address VARCHAR(100) UNIQUE NOT NULL DEFAULT ‘上海’ – 给address添加唯一和非空约束
);
INSERT INTO dept VALUES(10,‘xxx’,‘达拉斯’);
INSERT INTO dept (deptno,dname) VALUES(210,‘xxxY’);
INSERT INTO dept VALUES(30,‘xxx’,‘达拉斯’); - 删除默认值约束
ALTER TABLE dept CHANGE address address VARCHAR(10) ; - 添加默认值约束
ALTER TABLE dept CHANGE address address VARCHAR(10) NOT NULL DEFAULT ‘上海’ ;
外键约束
是两张表之间的约束。例如,用A表中的a字段约束B表中的b字段中的数据,A表叫做主表[父表],B表叫做从表[子表] ,主表中必须使用主键来约束从表
DROP TABLE dept;
DROP TABLE emp;
CREATE TABLE dept(
deptno INT PRIMARY KEY, – 给deptno字段添加主键约束
dname VARCHAR(10),
address VARCHAR(100)
);
创建表的时候添加外键约束
CREATE TABLE emp(
empno INT ,
deptnoX INT,
CONSTRAINT fk_dept_emp FOREIGN KEY (deptnoX) REFERENCES dept(deptno)
)
INSERT INTO dept VALUES(10,‘xxx’,‘达拉斯’);
INSERT INTO dept VALUES(30,‘xxx’,‘达拉斯’);
INSERT INTO emp VALUES(10,10);
INSERT INTO emp VALUES(30,30);
INSERT INTO emp VALUES(70,70); – 添加失败,因为主表dept表中没有70号部门
- 删除外键约束
ALTER TABLE tableName DROP FOREIGN KEY fk_name;
ALTER TABLE emp DROP FOREIGN KEY fk_dept_emp;
函数
字符函数
- CHARSET(str) 返回字串字符集
- CONCAT (string2 [,… ]) 连接字串
- INSTR (string ,substring ) 返回substring在string中出现的位置,没有返回0
- UCASE (string2 ) 转换成大写
- LCASE (string2 ) 转换成小写
- LEFT (string2 ,length ) 从string2中的左边起取length个字符
- LENGTH (string ) string长度
- REPLACE (str ,search_str ,replace_str ) 在str中用replace_str替换- search_str
- STRCMP (string1 ,string2 ) 逐字符比较两字串大小
- SUBSTRING (str , position [,length ]) 从str的position开始,取length个字符
- LTRIM (string2 ) RTRIM (string2 ) trim 去除前端空格或后端空格
数学函数
- ABS (number2 ) 绝对值
- BIN (decimal_number ) 十进制转二进制
- CEILING (number2 ) 向上取整
- CONV(number2,from_base,to_base) 进制转换
- FLOOR (number2 ) 向下取整
- FORMAT (number,decimal_places ) 转十六进制
- LEAST (number , number2 [,…]) 求最小值
- MOD (numerator ,denominator ) 求余
- RAND([seed]) RAND([seed])
日期与时间函数
- ADDTIME (date2 ,time_interval ) 将time_interval加到date2
- CURRENT_DATE ( ) 当前日期
- CURRENT_TIME ( )
- CURRENT_TIMESTAMP ( ) 当前时间
当前时间戳 - DATE (datetime ) 返回datetime的日期部分
- DATE_ADD (date2 , INTERVAL d_value d_type ) 在date2中加上日期或时间
- DATE_SUB (date2 , INTERVAL d_value d_type ) 在date2上减去一个时间
- DATEDIFF (date1 ,date2 ) 两个日期差
- NOW ( ) 当前时间
- YEAR|Month|DATE (datetime ) 年月日
系统信息函数
加密函数
函数 作用
- Password(str) 一般用来给用户的密码加密
- Md5(str) 给普通数据进行加密
其它函数
- CONVERT(S USING CS) 函数将字符串S的字符集转换成CS.
- 将字符串’ABC’的编码转换成GBK.
SELECT CHARSET(‘ABC’),CHARSET(CONVERT(‘ABC’ USING ‘GBK’));