时间:2021-07-01 10:21:17 帮助过:12人阅读
CREATE TABLE tb_user( id INT PRIMARY KEY AUTO_INCREMENT comment ‘id‘, username VARCHAR(255) comment ‘用户名‘, age INT, PASSWORD VARCHAR(255), role_id INT, FOREIGN KEY(role_id) REFERENCES tb_role(id) )charset utf8;
方案二:在创建表时,在所有字段后面,使用primary key(字段列表),如果有2个及以上各字段,则成为复合主键
CREATE TABLE tb_grade( number CHAR(10) COMMENT ‘学号‘, course CHAR(10) COMMENT ‘课程代码‘, score TINYINT UNSIGNED DEFAULT 0 COMMENT ‘成绩‘, -- 学号和课程号 组合唯一 PRIMARY KEY (number, course) )CHARSET utf8;
方案三:当表已经创建了,可以修改字段属性,也可以额外追加主键。
-- 通过修改字段 ALTER TABLE 表名 MODIFY number CHAR(10) PRIMARY KEY COMMENT ‘‘; -- 追加主键 ALTER TABLE 表名 ADD PRIMARY KEY(字段列表); -- 例如 ALTER TABLE tb_grade ADD PRIMARY KEY(number, score);
前提:表中的数据符合主键条件,否则无法追加主键。
必须先删除主键,然后才能更新主键。
-- 删除主键, 因为一个表中只有一个主键,所以不需要指定主键名称 ALTER TABLE tb_grade DROP PRIMARY KEY;
在开发中,很少使用业务数据作为主键。大部分使用逻辑性的字段(值和业务逻辑没有关系)作为主键,成为逻辑主键。
逻辑主键:int primary key
业务主键:s_id char(10) primary key
当字段不给值,或者给默认值,或者为null时,会自动的被系统触发,系统会用最大值+1,得到一个新的值。
自增长通常和主键搭配使用。primary key auto_increment
自增长特定:auto_increment
表:tb_student
CREATE TABLE tb_student ( sid INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增长 sname VARCHAR(20) COMMENT ‘学生姓名‘ )CHARSET utf8;
插入数据:
-- 触发自增长 insert into tb_student(sname) values(‘张三‘); -- 使用默认值 insert into tb_student values(null, ‘莉莉丝‘); insert into tb_student values(default, ‘hh‘); -- 可以指定自增长字段,但是下次插入时,系统还是使用最大值+1 INSERT INTO tb_student VALUES(10, ‘admin‘);
每次插入数据后,就会把下次的自增长字段值准备好。
一张表只能有一个自增长字段,因此,要修改自增长,必须先删除自增长,然后重新添加自增长字段。
修改当前自增长的下一次准备值:只能改成更大的,如果修改成更小的,则不会生效
-- 下一次的值 alter table tb_student auto_increment = 20;
-- 自增长变量,系统变量 SHOW VARIABLES LIKE ‘auto_increment%‘;
自增长是字段的属性:可以使用modify对字段进行重新定义。
-- 删除自增长 ALTER TABLE tb_student MODIFY sid INT PRIMARY KEY; -- 错误:主键约束是独立的,不是字段的属性,不可以重复定义 ALTER TABLE tb_student MODIFY sid INT;
一张表中往往有很多字段具有唯一性,数据不能重复:unique
unique允许字段为null,而且允许多个记录为null
方案一:创建表时,字段后面加上 unique / unique key
CREATE TABLE tb_student ( sid INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增长 sname VARCHAR(20) UNIQUE COMMENT ‘学生姓名‘ )CHARSET utf8;
注意:unique+非空 和主键的效果一样,但不是主键。
方案二:创建表时,字段后面 unique(字段列表),复合唯一键。
CREATE TABLE tb_user( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(30), pwd VARCHAR(30), UNIQUE(username, pwd) )
注意:主键约束、唯一约束不是字段的属性。
方案三:创建表后,追加唯一键
CREATE TABLE tb_student ( sid INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增长 sname VARCHAR(20) COMMENT ‘学生姓名‘ )CHARSET utf8; -- 在创建表后,追加unique ALTER TABLE tb_student ADD UNIQUE(sname);
唯一键可以有多个。唯一键本身是一个索引,每个索引都有一个唯一的名字,因此删除索引:alter table drop index xxx
索引默认使用字段名称作为索引名。
-- 删除索引(unique唯一索引) ALTER TABLE tb_student DROP INDEX sname;
end
mysql约束
标签:1.3 nbsp 业务 varchar 方案 null 重复 -- 插入数据