赞
踩
1.字段约束的目的是什么?
约束是数据库用来确保数据满足业务规则的手段,对数据做的条件限制。
2 字段约束的类型有几种?
主键约束(PRIMARY KEY)
唯一性约束(UNIQUE)
非空约束(NOT NULL)
检查约束(CHECK)
外键约束(FOREIGN KEY)
这里我们只详细介绍在开发过程中常用到的主键约束、唯一约束以及非空约束。
create table abc(
id int primary key auto_increment
);
insert into abc values(null);
insert into abc values(null);
insert into abc values(null);
select * from abc;
非空约束:如果为一个列添加了非空约束,那么这个列的值就不能为空,但可以重复。
添加非空约束,例如为password添加非空约束:
create table user(
id int primary key auto_increment,
password varchar(50) not null
);
show tables;
insert into user values(null,null);//不符合非空约束
insert into user values(null,123;);//OK
唯一约束:如果为一个列添加了唯一约束,那么这个列的值就必须是唯一的(即不能重复),但可以为空。
添加唯一约束,例如为username添加唯一约束及非空约束:
create table test(
id int primary key auto_increment,
username varchar(50) unique--唯一约束
);
show tables;
insert into test values(null,'lisi');
insert into test values(null,'lisi');--username的值要唯一,重复会报错的
select * from test;
注意:若将 CHECK 约束子句置于所有列的定义以及主键约束和外键定义之后,则这种约束也称为基于表的 CHECK约束。该约束可以同时对表中多个列设置限定条件。
使用:
创建表时设置检查约束的语法规则如下:
CHECK(<检查约束>)
【实例 1】在 test_db 数据库中创建 tb_emp7 数据表,要求 salary 字段值大于 0 且小于 10000,输入的 SQL 语句和运行结果如下所示。
mysql> CREATE TABLE tb_emp7
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> CHECK(salary>0 AND salary<100),
-> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
-> );
Query OK, 0 rows affected (0.37 sec)
修改表时设置检查约束的语法规则如下:
ALTER TABLE tb_emp7 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)
【实例 2】修改 tb_dept 数据表,要求 id 字段值大于 0,输入的 SQL 语句和运行结果如下所示。
mysql> ALTER TABLE tb_emp7
-> ADD CONSTRAINT check_id
-> CHECK(id>0);
Query OK, 0 rows affected (0.19 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改表时删除检查约束的语法规则如下:
ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;
MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。
SELECT 'ABC',LOWER('ABC') from dept; --数据转小写
select upper(dname) from dept --数据转大写
select length(dname) from dept --数据的长度
SELECT dname,SUBSTR(dname,1,3) FROM dept; --截取[1,3]
select dname,concat(dname,'123') X from dept --拼接数据
select dname,replace(dname,'a','666') X from dept --把a字符替换成666
select ifnull(comm,10) comm from dept2 #判断,如果comm是null,用10替换
round四舍五入,ceil向上取整,floor向下取整
select comm,round(comm) from emp
select comm,round(comm,1) from emp
select comm,ceil(comm) ,floor(comm) from emp
SELECT UUID()
返回结果uuid:a6b836ca-1573-11ec-915d-107b44337844
select now() -- 年与日 时分秒
返回结果now():2021-09-14 23:52:45
select curdate() --年与日
返回结果curdate():2021-09-14
select curtime() --时分秒
返回结果curtime():23:55:37
select now(),hour(now()),minute(now()),second(now()) from customer ;
select now(),year(now()),month(now()),day(now()) from customer ;
' 作为sql语句符号,内容中出现单撇就会乱套,进行转义即可
select 'ab'cd' -- 单引号是一个SQL语句的特殊字符
select 'ab\'cd' --数据中有单引号时,用一个\转义变成普通字符
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。