26 DDL、DML

lix_uan
• 阅读 931

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:主表相关记录删除时,从表对应的行也会删除

26 DDL、DML

非空约束 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;
点赞
收藏
评论区
推荐文章

暂无数据

lix_uan
lix_uan
Lv1
学无止境,即刻前行
文章
7
粉丝
5
获赞
0