约束笔记:
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;
学习随笔,有何不当或有更佳方案,欢迎朋友们在评论区讨论。