mysql基础入门
前言:sql语言入门
sql语言分为五个部分
- 数据查询语言(Data Query Language, DQL)
1、主要是select操作; - 数据操作语言(Data Manipulation Language, DML)
1、insert操作;
2、update操作;
3、delete操作; - 数据定义语言(Data Definition Language, DDL)
1、create操作;
2、alter操作;
3、drop操作; - 数据控制语言(Data Control Language, DCL)
1、grant操作(用户授权);
2、revoke操作(权限回收); - 事务控制语言(Transaction Query Language, TCL)
1、start transaction(开启事务);
2、commit;
3、rollback;
4、set tranaction(设置事务级别);
一、创建数据库和表
说明:本文以一个完整例子描述,版本是mysql8
-- 创建数据库
create database test_db;
-- 查看数据库
show databses;
-- 切换数据库
use test_db;
-- 创建学生表
create table t_student(
sno int(5),
sname varchar(6),
sex char(1),
age int(3),
class_name varchar(15),
enter_date date,
email varchar(32)
);
-- 查询学生表
select * from t_student limit 5;
-- 查看学生表建表语句
show create table t_student;
-- 查看学生表详情
desc t_student;
二、修改数据
/*
插入操作:向学生表中插入记录
*/
insert into t_student values (1,'张三','男',23,'行政一班','2022-01-01','zs@163.com');
insert into t_student values (2,'李四','男',23,'行政一班','2022-01-01','ls@163.com');
insert into t_student values (3,'王五','男',23,'行政一班','2022-01-01','ww@163.com');
/*
更新操作
*/
update t_student set sex = '女' where sno = 2;
/*
删除操作
*/
delete from t_student where sno = 2;
三、修改表结构
-- 学生表重命名
alter table t_student rename to t_student2;
-- 恢复名称
alter table t_student2 rename to t_student;
-- 向学生表结尾插入一列
alter table t_student drop addr;
-- 向学生表开头插入一列
alter table t_student add addr varchar(255) first;
-- 向学生表sex列后插入一列
alter table t_student add addr2 varchar(255) after sex;
-- 更改学生表列属性
alter table t_student modify addr2 varchar(123);
-- 更改学生表列名称
alter table t_student change addr2 addr3 varchar(123);
四、非外键约束
-- 删除学生表
drop table if exists t_student;
-- 新建带非外键约束的学生表
create table t_student(
sno int(5) primary key auto_increment,
sname varchar(6) not null,
sex char(1) default '男' check(sex = '男' || sex = '女'),
age int(3) check(age >= 18 and age <= 60),
class_name varchar(15),
enter_date date,
email varchar(32) unique
);
-- 测试email唯一性生效情况
insert into t_student values (1,'张三','男',21,'java01班','2023-9-1','zs@126.com');
insert into t_student values (null,'李四','男',21,'java01班','2023-9-1','zs@126.com');
-- 删除表
drop table t_student;
-- 新建普通表
create table t_student(
sno int(5),
sname varchar(6),
sex char(1),
age int(3),
class_name varchar(15),
enter_date date,
email varchar(32)
);
-- 对已存在表设置约束
alter table t_student add constraint pk_stu primary key(sno);
alter table t_student modify sno int(5) auto_increment;
alter table t_student add constraint uq_email unique(email);
alter table t_student add constraint ck_sex check(sex = '男' || sex = '女');
alter table t_student add constraint ck_age check(age >= 18 and age <= 60);
五、外键约束
-- 新建员工宿舍表
create table t_dept(
dept_no int(5) primary key auto_increment,
dept_name varchar(255) unique
)
-- 新建员工表
drop table if exists t_employee;
show tables;
create table t_employee(
emp_no int(5) primary key auto_increment,
emp_name varchar(10) not null,
emp_mail varchar(20) unique,
dept_id int(5),
constraint fk_dept foreign key (dept_id) references t_dept(dept_no)
);
-- 新增宿舍表记录
insert into t_dept values
(null, '一号宿舍楼'), (null, '三号宿舍楼'), (null, '八号宿舍楼');
-- 错误插入员工记录测试,预期会报错
insert into t_employee values (null,'张三','zs@126.com',4);
-- 新增员工记录
insert into t_employee values (null,'张三','zs@126.com',1);
insert into t_employee values (null,'李四','ls@126.com',2),(null,'小明','xm@126.com',3);
-- 删除外键约束
alter table t_employee drop foreign key fk_dept;
/*
对已有表设置外键约束,外键策略
1、cascade 2、set null
说明:在update和delete外检设置中可以混合使用
*/
alter table t_employee add constraint foreign key fk_dept (dept_id)
references t_dept(dept_no) on update cascade on delete cascade;
-- 更新宿舍表,员工表中的记录会关联更新
update t_dept set dept_no = 5 where dept_no = 2;
-- 查看员工表的级联更新效果
select * from t_employee;