文章目录
一.数据类型
1.1命名规则
1.字段名必须以字母开头,尽量不要使用拼音
2.长度不能超过30个字符(不同数据库,不同版本会有不同)
3.不能使用SQL的保留字,如where,order,group
4.只能使用如下字符az、AZ、0~9、$ 等
5.Oracle习惯全大写:USER_NAME,mysql习惯全小写:user_name
6.多个单词用下划线隔开,而非java语言的驼峰规
1.2字符
- char长度固定,不足使用空格填充,最多容纳2000个字符,char(11)存储abc,占11位。查询速度极快但浪费空间
- varchar变长字符串,最多容纳4000个字符,varchar(11)存储abc,只占3位。查询稍慢,但节省空间。Oracle为varchar2
- 大文本: 大量文字(不推荐使用,尽量使用varchar替代)
- 以utf8编码计算的话,一个汉字在u8下占3个字节
- 注:不同数据库版本长度限制可能会有不同
1.3数字
- tinyint,int整数类型
- float,double小数类型
- numeric(5,2) decimal(5,2)—也可以表示小数,表示总共5位,其中可以有两位小数
- decimal和numeric表示精确的整数数字
1.4日期
- date 包含年月日
- time时分秒
- datetime包含年月日和时分秒
- timestamp时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数
二.字段约束
是通过不同的方式,给不同的字段添加不同的约束,实现不同效果
常见的字段约束: 非空约束/唯一约束/主键约束…
通常在设计表时,就已经设计好了表里一些字段的约束情况
2.1主键约束
主键约束:如果为一个列添加了主键约束,那么这个列就是主键,主键的特点是唯一且不能为空。通常情况下,每张表都会有主键。
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;
2.2非空约束
非空约束:如果为一个列添加了非空约束,那么这个列的值就不能为空,但可以重复。
添加非空约束,例如为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
2.3唯一约束
唯一约束:如果为一个列添加了唯一约束,那么这个列的值就必须是唯一的(即不能重复),但可以为空。
添加唯一约束,例如为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;
三.基础函数
3.1lower(数据转小写)
SELECT 'ABC',LOWER('ABC') from dept; --数据转小写
3.2upper(数据转大写)
select upper(dname) from dept --数据转大写
3.3length (数据的长度)
select length(dname) from dept --数据的长度
3.4substr(截取)
SELECT dname,SUBSTR(dname,1,3) FROM dept; --截取[1,3]
3.5concat(拼接数据)
select dname,concat(dname,'123') X from dept --拼接数据
3.6replace(字符替换)
select dname,replace(dname,'a','666') X from dept --把a字符替换成666
3.7ifnull(判断是否为null)
ifnull(判断是否为null)
3.8round(四舍五入) & ceil( 向上取整 ) & floor( 向下取整 )
直接四舍五入取整
select comm,round(comm) from emp
四舍五入并保留一位小数
select comm,round(comm,1) from emp
ceil向上取整,floor向下取整
select comm,ceil(comm) ,floor(comm) from emp
3.9now (日期)
select now() -- 年与日 时分秒
select curdate() --年与日
select curtime() --时分秒
3.10year & month & day hour(时) minute(分) second(秒 )
select now(),hour(now()),minute(now()),second(now()) from emp ;
year()年 month()月 day()日
select now(),year(now()),month(now()),day(now()) from emp ;
3.11转义字符\
作为sql语句符号,内容中出现单撇就会乱套,进行转义即可
select 'ab'cd' -- 单引号是一个SQL语句的特殊字符
select 'ab\'cd' --数据中有单引号时,用一个\转义变成普通字符