MySql的数据完整性约束

实体完整性(主键约束 唯一约束 自增长)
域完整性 (非空约束 默认值约束)
引用完整性(外键约束)

约束
主键约束
主键约束:
被主键约束所约束起来的字段,该字段中的数据不能为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’));

猜你喜欢

转载自blog.csdn.net/shuai_ge_feng/article/details/108773689