SQL分类
DDL
- 数据定义语言,主要关键字包括create、drop、alter等
DML
- 数据操作语句,用于增删改查,包括insert、delete、update、select等
DDL
- 数据控制语句,用于访问权限和安全级别的控制,包括grant、revoke等
操作Database
#创建数据库
create database 数据库名 [charset 字符集];
#查看数据库
show databases;
#删除数据库
drop database 数据库名;
#选择数据库
use 数据库名;
#查看当前正在使用哪个数据库
select database();
操作table
#查看当前数据库的所有表格
show tables;
show tables from 数据库名;
#创建表结构
create table 表名称(
字段名1 数据类型1,
字段名2 数据类型2,
字段名3 数据类型3
);
create table 表名称(
字段名1 数据类型1 主键 自增长,
字段名2 数据类型2 非空 默认值,
字段名3 数据类型3
)ENGINE=当前表格的引擎 AUTO_INCREMENT=自增长的起始值 DEFAULT CHARSET=表数据的默认字符集;
#查看表结构
desc 表名称
#删除表结构 数据和结构都被删除
drop table 表名称
#重命名表
alter table 表名 rename 新表名;
rename table 表明 to 新表名;
#增加一列
alter table 表名 add 列名 数据类型 【first/after某一列】
#删除列
alter table 表名 drop 列名;
#修改列类型
alter table 表名 modify 列名 数据类型
#修改列名
alter table 表名 change 列名 新列名 数据类型
约束 constraints
键约束:主键约束、外键约束、唯一键约束
not null:非空约束
check:检查约束
defult:缺省约束
#查看某个表的约束和索引 select * from information_schema.table_constraints where table_name = '表名'; show index from 表名; show create table 表名;
主键约束 primary key
- 主键约束相当于唯一约束 + 非空约束
- 每个表最多只允许一个主键约束
唯一键 unique key
一个表可以有多个唯一约束
主键是非空,而唯一键允许为空
CREATE TABLE t_stu( sid INT PRIMARY KEY, sname VARCHAR(100) UNIQUE, gender CHAR );
外键约束 foreign key
保证两个表之间的参照完整性
在从表上建立外键,主表要先存在
从表外键列和主表被参照的列名可以不同,但数据类型必须一样
一个表可以建立多个外键约束
级联置空 set null:主表对应字段删除时,从表对应字段改为null
级联删除 cascade:主表相关记录删除时,从表对应的行也会删除
非空约束 not null
- 规定某个字段不能为空
缺省约束 default
插入数据时如果没有指定其他值,则会使用默认值
CREATE TABLE t_stu( sid INT PRIMARY KEY, sname VARCHAR(100) NOT NULL, gender CHAR NOT NULL DEFAULT '男' );
自增列 auto_increment
整数类型的字段才可以设置自增长
一个表最多只能有一个自增长列
自增长列必须为非空
自增长列必须是主键或唯一键
CREATE TABLE t_stu( sid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(100) NOT NULL, gender CHAR NOT NULL DEFAULT '男', card_id CHAR(18) NOT NULL UNIQUE, birthday DATE, address VARCHAR(200) );
增删改查
#增
insert into 表名(字段名) values (值);
#删
delete from 表名 where 条件;
#改
update 表名 set 字段名=新值 where 条件;
#查
select 列名 from 表名 where 条件
group by
having
order by (asc|desc)
limit m,n;
别名 as
UPDATE t_department AS d,t_employee AS e
SET d.manager_id =e.eid
WHERE d.dname = '教学部'
AND d.did = e.`dept_id`
AND e.ename = '孙红雷';
去重 distinct
#查询员工表的部门编号
SELECT DISTINCT dept_id FROM t_employee;
#统计员工表中员工有几个部门
SELECT COUNT(DISTINCT dept_id) FROM t_employee;
着重号 ``
着重号的意义在于明确其中的内容是字段名,尤其是当字段名与关键字重合的情况下
select `name` from t_stu;