一、DDL语言
1、库操作
(1)删除:drop database if exists 旧库名; (2)创建:create database 【if not exists】新库名; (3)修改:alter database 库名 character set gbk; #修改字符集
2、表操作
(1)删除:drop table if exists 旧表名; (2)创建: create table 【if not exists】新表名( 列名 列类型【(长度) 约束】, ... 列名 列类型【(长度) 约束】 ) (3)修改: #修改列名:alter table 表 change column 旧列名 新列名 类型; #修改列的类型或约束:alter table 表 modify column 列名 类型; #添加新列:alter table 表 add column 列名 类型; #删除列:alter table 表 drop column 列名; #修改表名:alter table 旧表名 rename to 新表名; (4)复制,可以跨库 #仅复制表结构:create table 到表 like 从表; #复制表结构+数据:create table 到表 select * from 从表 where 条件;
二、数据类型
1、数值型
(1)整型:
tinyint、smallint、mediumint、int/integer、bigint
1字节 2字节 3字节 4字节 8字节 1字节=8位
默认有符号,添加unsigned可设置为无符号
平时定义的INT(7)中7规定的不是范围,和zerofill搭配用于补0,加上zerofill后默认不支持负数,范围是由类型决定
(2)小数:
浮点型:float (M, D)、double (M, D)
4字节 8字节
定点型:decimal (M, D)
M+2字节
M:总位数 D:小数点后的位数
decimal默认精度(10,0),定点型比浮点型更精确
2、字符型
短文本:char、varchar。
固定长度的意思是假如声明char(10),但插入的为2个字符,所存长度还是10。而声明varchar(10),插入的大小是2个字符,所存大小就是2个字符。1个字母和1个汉字都代表一个字符。
较长文本:text、blob(较大二进制)
*其他:binary、varbinary保存较短二进制,enum保存枚举(不区分大小写,一次只能选一个成员),set保存集合(与枚举不同的是一次可以选择多个成员)
3、日期型
datetime 日期+时间 8字节 1000-9999 不受时区影响,只能反映插入时的当地时区
timestamp 日期+时间 4字节 1970-2038 受时区、SQLMode、mysql版本影响,更能反映当前时区的真实时间
例子:timestamp更能准确反映当前插入时间,但支持的范围小
插入数据后如果修改时区
timestamp会根据时区的改变而改变
三、约束
六大约束:not null、default、primary key、unique、foreign key、check(mysql不支持)
1、列级约束:not null、default、primary key、unique
直接加在字段后,一个列可同时添加多个约束,无顺序要求
2、表级约束:primary key、unique、foreign key
3、主键、唯一键对比:
unique可以为null,但也只能有一个null
外键:
- 主表的关联列必须是一个key(一般是主键或唯一键)
- 插入数据时,先插主表,再插从表。
- 删除数据时,先删从表,再删主表。
添加外键
添加外键时级联删除
添加外键时级联置空
主键、外键、唯一键都会自动生成索引,查看索引:show index from 表
4、自增长列
AUTO_INCREMENT
(1)不一定和主键搭配,但要求是一个key
(2)一个表最多只有一个自增长列
(3)只能是数值型