约束笔记:
1:主键约束默认是唯一且非空的
2:AUTO_INCREMENT在MYSQL8.0中会将自增主键保存到重做日志中,即使关闭后重启,存储引擎innoDB仍然会根据重做日志初始化计数器内存值。
3:设置了外键约束后,如果要删除主表的内容,则需要先把从表的相关内容给删除。
4:建表时一般设置not null default '' 或default 0,因为nul这个特殊值不好比较,而且查找效率低。
5:外键约束不能跨引擎使用,且mysql中其有一定成本,不适合大并发SQL操作,开发中一般在应用层解决外键约束
6:对于外键约束最好采用ON UPDATE CASCADE ON DELETE RESTRICT的方式(约束等级默认为RESTRICT)
#练习一 CREATE DATABASE test04_emp; USE test04_emp; CREATE TABLE emp2( id INT, emp_name VARCHAR(15) ); CREATE TABLE dept2( id INT, dept_name VARCHAR(15) ); #1:向表emp2的id列中添加PRIMARY KEY约束 ALTER TABLE emp2 ADD PRIMARY KEY(id); DESC emp2; #2:向dept2的id列中添加RIMARY KEY约束 ALTER TABLE dept2 ADD PRIMARY KEY(id); #3:向emp2表中添加dept_id,并在其中定义FOREIGN KEY约束,与之相关联的列是dept2表中的id列 ALTER TABLE emp2 ADD dept_id INT; ALTER TABLE emp2 ADD CONSTRAINT FOREIGN KEY (dept_id) REFERENCES dept2(id); #练习二 USE test01_library; DESC books; #1: ALTER TABLE books MODIFY id INT PRIMARY KEY AUTO_INCREMENT; #2: ALTER TABLE books MODIFY NAME VARCHAR(50) NOT NULL; #3: ALTER TABLE books MODIFY `authors` VARCHAR(100) NOT NULL; #4: ALTER TABLE books MODIFY price FLOAT NOT NULL; #5: ALTER TABLE books MODIFY pubdate YEAR NOT NULL; #6: ALTER TABLE books MODIFY NUM INT(11) NOT NULL; #练习三 #1:创建数据库test04_company CREATE DATABASE IF NOT EXISTS tes04_company CHARACTER SET 'utf8'; #2:创建offices和employees表 CREATE TABLE IF NOT EXISTS offices( officeCode INT(10) PRIMARY KEY, city VARCHAR(50) NOT NULL, address VARCHAR(50), country VARCHAR(50) NOT NULL, postalCode VARCHAR(15) UNIQUE ); DESC offices; CREATE TABLE employees( employeeNumber INT(11) PRIMARY KEY AUTO_INCREMENT, lastName VARCHAR(50) NOT NULL, firstName VARCHAR(50) NOT NULL, mobile VARCHAR(25) UNIQUE, officeCode INT(10) NOT NULL, jobTitle VARCHAR(50) NOT NULL, birth DATETIME NOT NULL, note VARCHAR(255), sex VARCHAR(5), CONSTRAINT fk_emp_offcode FOREIGN KEY (officeCode) REFERENCES offices(officeCode) ); #3:将表employees的mobile字段修改到officeCode字段后边 ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER officeCode; #4:将表employees的birth字段改名为employee_birth ALTER TABLE employees CHANGE birth employee_birth DATETIME; #5:修改sex字段,数据类型为CHAR(1),非空约束 ALTER TABLE employees MODIFY sex CHAR(1) NOT NULL; #6:删除字段note ALTER TABLE employees DROP COLUMN note; #7:增加字段名favoriate_activity,数据类型为VARCHAR(100) ALTER TABLE employees ADD favoriate_activity VARCHAR(100); #8:将表employees名称改为employees_info RENAME TABLE employees TO employees_info;
学习随笔,有何不当或有更佳方案,欢迎朋友们在评论区讨论。