-- 【数据库】
show DATABASES;
CREATE DATABASE if not EXISTS demo;
-- 修改数据库的字符集:utf8mb4 和排序规则:utf8mb4_0900_ai_ci ai:声调/重音不敏感 ci:大小写不敏感
alter database demo CHARACTER set utf8mb4 COLLATE utf8mb4_0900_ai_ci;
use demo;
-- 查看已使用的数据库
select DATABASE();
drop DATABASE if EXISTS demo;
-- 【表】
show tables;
-- 创建数据表
create table if not EXISTS student(
id int UNSIGNED,
name VARCHAR(20),
age TINYINT UNSIGNED,
gendeer enum('男','女','保密'),
createdAt TIMESTAMP
);
-- 查看表结构
desc student;
use student;
-- 新增字段
alter TABLE student add updatedAt TIMESTAMP;
-- 删除字段
alter TABLE student drop updatedAt;
-- 修改字段的数据类型
alter TABLE student MODIFY createdAt datetime;
-- 修改字段的名称和数据类型
alter table student change createdAt createAt TIMESTAMP;
-- 修改表名
ALTER TABLE student RENAME to stu;
drop TABLE if EXISTS student;
-- 【SQL约束】
-- primary key:主键约束 --区分记录的唯一性,值不能重复,为不能为空
SELECT DATABASE();
-- 主键
create table if not EXISTS stu_1(
id int UNSIGNED PRIMARY KEY,
name VARCHAR(20)
);
insert INTO stu_1(id,name)VALUES('1','test');
drop TABLE if EXISTS stu_1;
create table if not EXISTS stu_1(
id int UNSIGNED,
name VARCHAR(20),
PRIMARY KEY(id)
);
-- primary key:联合主键 --同时将多个字段作为一个主键来使用,多个字段联合起来的值不能重复
create table if not EXISTS stu_2(
id int UNSIGNED,
name VARCHAR(20),
PRIMARY KEY(id,name)
);
insert INTO stu_2(id,name)VALUES('1','test');
insert INTO stu_2(id,name)VALUES('1','test1');
insert INTO stu_2(id,name)VALUES('1','test1');
drop TABLE if EXISTS stu_2;
-- auto_increment:自动递增
create table if not EXISTS stu_3(
id int UNSIGNED PRIMARY key auto_increment,
name VARCHAR(20)
);
insert INTO stu_3(name)VALUES('test');
-- unique:唯一约束 --保证某个字段的值永远不重复,允许多个null存在。一张表只能一个主键,但能有多个unique
create table if not EXISTS demo.stu_4(
id int UNSIGNED PRIMARY key auto_increment,
name VARCHAR(20) UNIQUE
);
insert INTO demo.stu_4(name)VALUES(NULL);
-- not null:非空约束
create table if not EXISTS demo.stu_5(
id int UNSIGNED PRIMARY key auto_increment,
name VARCHAR(20) not NULL
);
insert INTO demo.stu_5(name)VALUES('yong');
insert INTO demo.stu_5(name)VALUES(NULL);
-- default:默认值
create table if not EXISTS demo.stu_6(
id int UNSIGNED PRIMARY key auto_increment,
name VARCHAR(20) not NULL,
gender enum('男','女','保密') DEFAULT '保密',
createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP on UPDATE CURRENT_TIMESTAMP # 自动更新
);
insert INTO demo.stu_6(name)VALUES('yong');
update demo.stu_6 set name ='yong1' WHERE id =2;
-- foreign key:外键约束
-- 如果一张表中的一个字段指向了另一张表中的主键,就将该字段叫做外键
-- 外键的数据类型必须和指向的主键一致
-- 定义外键的表称之为从表,为外键引用的表称之为主表
-- 主表
create TABLE if not EXISTS demo.user(
id int UNSIGNED PRIMARY key auto_increment,
username VARCHAR(20) not null
);
desc demo.user;
INSERT INTO demo.user(username) VALUES('william');
create TABLE if not EXISTS demo.dynamic(
id int UNSIGNED PRIMARY key auto_increment,
content VARCHAR(20) not null,
user_id int UNSIGNED
);
DESC demo.dynamic;
DROP TABLE if EXISTS demo.dynamic;
-- 从表
create TABLE if not EXISTS demo.dynamic_1(
id int UNSIGNED PRIMARY key auto_increment,
content VARCHAR(20) not null,
user_id int UNSIGNED,
FOREIGN KEY(user_id) REFERENCES demo.user(id)
);
-- 外键操作 action
-- 严格操作: restrict
-- 主表中不存在对应的数据,从表不允许添加
-- 从表引用着数据,主表对应的数据不允许删除
-- 从表引用着数据,主表对应的主键不允许修改
-- 置空操作:set null
-- 修改或删除主表id时,所有跟它关联的从表字段都会被设置为nul1
-- 级联操作:cascade
-- 修改或删除主表id时,所有跟它关联的从表字段都会做同样的操作
-- 一般情况下,主表删除时,从表置空,主表更新时,从表级联
-- 从表
create TABLE if not EXISTS demo.dynamic_2(
id int UNSIGNED PRIMARY key auto_increment,
content VARCHAR(20) not null,
user_id int UNSIGNED,
FOREIGN KEY(user_id) REFERENCES demo.user(id) on UPDATE CASCADE on DELETE set null
);