基本语法
create table table_name(
字段1 类型 约束,
字段2 类型 约束,
...
);
CREATE TABLE `NewTable` (
`id` int UNSIGNED NOT NULL AUTO_INCREMENT ,
`username` varchar(10) NOT NULL ,
`password` varchar(10) NOT NULL ,
PRIMARY KEY (`id`)
);
数据类型
- MySQL的数据类型包括:数值类型、时间和日期类型、字符串类型
数值类型
[图片上传失败...(image-d88d2b-1545293688634)]
- 注意:对于int类型int(m)不代表他占用的字节数,他占用的字节数是根据数据类型来确定的,m只是表示格式化输出而已
- 注意:对应浮点型(m,d) m表示数据的总长度,d表示小数点后面有几位
- 数值类型默认是区分正负的,可以加unsigned 来不要负数
时间和日期类型
[图片上传失败...(image-682f65-1545293688634)]
字符串类型
[图片上传失败...(image-a39e15-1545293688634)]
注意1:char(m) 和 varchar(m)的区别
- char是不可变字符串,当实际输入的数据少于m时,他后面的字节数会以空格的形式补满,当读取的时候,会忽略掉空格,char读取速度快但是比较耗空间
- varchar是可变字符串,当实际输入的数据小于m时,他后面的字节数会被省略掉,var节省空间,但查询速度慢
- 实际上在使用char和varchar时会多占1个或2个字节,用以储存字节长度
- m的值是字符长度,而不是字节长度,不同的编码方式中英文占用的字节长度不同
约束
- 非空约束 not null
- 唯一约束 unique
- 主键约束 primary key 值唯一、非空、和其他表的外键关联
- 校验约束 check 对于mysql无效
- 默认约束 default
- 外键约束 foreign key 在多表的时候使用
- 查看表的建表信息,使用describe
DESCRIBE table_name;
非空约束 not null
- 非空约束用于指定该字段必须赋值,可以直接写在字段后面
- 如果在插入数据的时候,不给该字段赋值,那么就会报错
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
id INT NOT NULL,
name VARCHAR(10) NOT NULL
);
唯一约束 unique
- 添加了唯一约束的字段,不能重复
- 在当前字段后面跟唯一约束
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
id INT NOT NULL,
name VARCHAR(10) NOT NULL UNIQUE
);
- 在字段写完后跟唯一约束
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
id INT NOT NULL,
name VARCHAR(10) NOT NULL,
stuId INT NOT NULL,
UNIQUE(id),
UNIQUE(stuId)
);
DESCRIBE stu5;
- 将几个字段同时添加为唯一约束,他们自动组成了一个索引,需要给他指定一个名字
CONSTRAINT myunique UNIQUE(id, stuId)
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
id INT NOT NULL,
name VARCHAR(10) NOT NULL,
stuId INT NOT NULL,
CONSTRAINT myunique UNIQUE(id, stuId)
);
DESCRIBE stu5;
- 在建好表后增加唯一约束
- 单行唯一约束
ALTER TABLE stu5 ADD UNIQUE(name);
- 多行唯一约束
ALTER TABLE stu5 ADD CONSTRAINT myunique UNIQUE(id, stuId);
- 删除唯一约束,注意这里用的是INDEX 说明这已经是一条索引了
ALTER TABLE stu5 DROP INDEX myunique;
主键约束 primary key
- 主键约束自带了 not null 和 unique 约束,主要是用来和其他表的外键进行关联
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
id INT PRIMARY KEY,
name VARCHAR(10) NOT NULL UNIQUE
);
- 如果字段是xxxint类型,我们还可以让他自动增长 auto_increment
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10) NOT NULL UNIQUE
);
- 在字段写完后指定单行主键约束
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
id INT NOT NULL,
name VARCHAR(10) NOT NULL,
stuId INT NOT NULL,
PRIMARY KEY(id)
);
DESCRIBE stu5;
- 在字段写完后指定多行主键约束
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
id INT NOT NULL,
name VARCHAR(10) NOT NULL,
stuId INT NOT NULL,
CONSTRAINT myKey PRIMARY KEY(id, stuId)
);
DESCRIBE stu5;
- 在表创建完成后增加单行主键约束
ALTER TABLE stu5 ADD PRIMARY KEY(id);
- 在表创建完成后增加多行主键约束
ALTER TABLE stu5 ADD CONSTRAINT myKey PRIMARY KEY(id, stuId);
- 删除主键约束
ALTER TABLE stu5 DROP PRIMARY KEY;
- 注意: 一张表只有一个主键,但是这个主键可以是多条字段来组成,删除主键时不需要跟名字,因为一张表只有一个主键
默认约束 default
- 默认约束可以给字段赋一个默认值
DROP TABLE IF EXISTS test5;
CREATE TABLE test5 (
id int NOT NULL ,
name varchar(10) DEFAULT '小明' ,
PRIMARY KEY (`id`)
)
;
外键约束 foreign key
- 外键约束发生在表于表之间
- 表于表之间的关系有 1-1,1-N,N-N,也就是我们常说的一对一,一对多,多对多
网友评论