MySQL(二):快速了解SQL的DDL,DML,DQL,DCL语句

star2017 1年前 ⋅ 72 阅读

快速了解基本的 SQL 语句。

SQL(Structure Query Language - 结构化查询语言),已是关系数据库的基本标准。

本篇涉及到的 SQL 语法可能并不完整,主要是为了快速构建一个 SQL 操作的概念。实际工作中大多会借用工具来快速操作,如SQLyog、Navicat

登录 MySQL:安装目录 \bin 里包含 MySQL 命令行客户端:

# mysql -p 密码 -u 用户名 -h 主机名 --default-character-set=utf8

SQL 语句类别

主要有三类:

  1. DDL:Data Definition Language, 数据定义语句,定义数据库对象,包含 数据库、表、列、索引 等,常用操作关键字包含 create、drop、alter
  2. DML:Data Manipulation Language,数据操纵语句,对表中数据行、列、类型等执行 添加、删除、更新 操作,核心关键字包括 insert, update, delete
  3. DCL:Data Control Language,数据控制语句,定义数据库、表、用户的访问权限和安全级别,关键字包括 grant, revoke

另外:由 select 关键字构成的DQL查询语句。

DDL:数据定义语句

数据库操作

  1. 创建数据库

    create database [if not exists] db_name character set utf8 collate utf8_general_ci;
    

    在创建数据库时,需要指定字符编码和字符排序规则
    cicase insensitive 首字母组合, 即大小写不敏感,a 和 A 在字符判断中被 当做一样的。
    utf8_general_ci 不区分大小写,这个在注册用户名和邮箱的时候有用。
    utf8_general_cs 区分大小写
    utf8_bin 字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容
    MySQL 有两个支持 unicodecharacter set

    ucs2,使用 16 bits 来表示一个 unicode 字符;
    utf8,使用 1~3 bytes 来表示一个 unicode 字符。

  2. 查看数据库创建信息

    show create database db_name;
    
  3. 列出所有数据库

    show databases;
    
  4. 选择数据库

    use db_name;
    
  5. 查看当前所在数据库

    select database();
    
  6. 修改数据库

    alter database db_name character set utf8 ;
    
  7. 删除数据库

    drop database [if exists] db_name;
    

表操作

  1. 创建表

    create table tb_name(column1_name column1_type(length) not/default null comment '注释',column2_name column3_type,.....);
    
  2. 查看表创建信息

    show create table tb_name;
    
  3. 查看表信息

    desc tb_name;
    
  4. 列出所有表

    show tables;
    
  5. 选中表

    use tb_name;
    
  6. 重命名表

    alter table tb_name rename [to] new_tb_name; //mysql特有
    示例:
    ALTER TABLE stu RENAME student;
    ALTER TABLE stu RENAME TO student;
    
  7. 删除表

    drop table tb_name;
    
  8. 重建表(先清空,再重建表结构)

    truncate tb_name;
    

字段操作

  1. 增加字段,默认在表尾增加

    alter table tb_name add(column1_name column1_type(length) default 'value' after column_name, column2_name...);
    -- 示例:
    ALTER TABLE user ADD(address VARCHAR(100) DEFAULT NULL);
    
  2. ALTER COLUMN:字段设置或删除默认值

    alter table tb_name alter column column_name set default 'value'; 
    -- 示例:
    ALTER TABLE student ALTER COLUMN home_address SET DEFAULT 'ShenZhen'; 
    ALTER TABLE student ALTER COLUMN home_address DROP DEFAULT;
    
  3. CHANGE COLUMN:字段重命名、修改列类型、移动列位置

    alter table tb_name change old_column new_column column_type(length) after column_name;
    -- 示例:
    ALTER TABLE student CHANGE home_address address VARCHAR(100) AFTER age;
    
  4. MODIFY COLUMN:除了不能修改列名,其它与 CHANGE COLUMN一样操作

    alter table tb_name modify column_name column_type(length) not/default 'value' after/before column_name;
    -- 示例:
    ALTER TABLE stu MODIFY address VARCHAR(200);
    
  5. DROP COLUMN:删除表字段

    alter table tb_name drop column_name
    -- 示例:
    ALTER TABLE student DROP address;
    
  6. FIRST|AFTER:修改字段顺序

    • FIRST:放在表最前。
    • AFTER COLUMN_NAME:放在指定字段后面

DML:数据操作语句

DML 数据操纵语句,是开发日常使用 SQL 语句,主要通过insert、update、delete关键字对表数据进行操作。

insert:插入数据

insert into tb_name (field1,field1,field1) values(value1,value2,value3)

插入操作,若不写 字段名,则必须写所有列的值。可空字段、非空但含默认值字段、自增字段可不在字段列表中出现。
一条 insert into 语句可插入多条数据:

insert into tb_name (field1,field1,field1) values(value1,value2,value3),(value1,value2,value3),(value1,value2,value3)

update:更新行数据

update tb_name set column_name=value[,column_name=value] [where condition ...];

delete:删除数据行

delete from tb_name [where condition ...]

DQL:数据查询语句

* :查所有

select * from tb_name;
-- * 表示所有字段。

distinct:去重

select distinct column_name from tb_name

where:条件

where condition:查所有数据

条件判断:=、>、<、>=、<=、!=、<>、is null、is not null

select * from tb_name where condition ...

order by:排序

select `*` from tb_name [where condition] [order by column_name [asc|desc],order by column_name [asc|desc]]
-- 示例:若第一个字段相同,则按第二个字段排序,依次类推
SELECT * FROM actor ORDER BY first_name ASC, last_name DESC;

limit:分页

select `*` from tb_name [limit offset_start, row_count]
-- **offset_start:**起始偏移量,即从第几行数据开始查询,默认为 **0**
-- **row_count:**指定要查询的行数
-- 示例:
SELECT `*` FROM actor ORDER BY first_name ASC, last_name DESC LIMIT 3,3;

group by:分组

group by:分组查询,默认输出分组后 id 为最小的数据

select `*` from tb_name group by column_name[,column_name]
-- 示例:
SELECT `*` FROM film GROUP BY type;

having:对分组的结果再条件过滤,一般和聚合函数配合使用。

select `*` tbu_user group by phone_number having count(phone_number) > 1;

注:where 是在聚合前对记录进行过滤,通过先用 where 来缩小结果集,再根据逻辑用 having 再过滤。

DCL:数据控制语句

DCL 语句主要用于管理数据库系统中的对象的权象,开发较少使用。

  1. GRANT:授予用户访问权限

    GRANT SELECT ON `*.*` TO 'user_name'@'%'; 
    GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE ON 'db_name'.* TO 'user_name'@'%' WITH GRANT OPTION;
    
  2. REVOKE: 解除用户访问权限

    REVOKE ALTER ON db_name.* FROM 'user_name'@'%';
    
  3. DENY:拒绝用户访问

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: