快速了解基本的 SQL 语句。
SQL(Structure Query Language - 结构化查询语言),已是关系数据库的基本标准。
本篇涉及到的 SQL 语法可能并不完整,主要是为了快速构建一个 SQL 操作的概念。实际工作中大多会借用工具来快速操作,如SQLyog、Navicat。
登录 MySQL:安装目录 \bin 里包含 MySQL 命令行客户端:
# mysql -p 密码 -u 用户名 -h 主机名 --default-character-set=utf8
SQL 语句类别
主要有三类:
- DDL:Data Definition Language, 数据定义语句,定义数据库对象,包含 数据库、表、列、索引 等,常用操作关键字包含 create、drop、alter。
- DML:Data Manipulation Language,数据操纵语句,对表中数据行、列、类型等执行 添加、删除、更新 操作,核心关键字包括 insert, update, delete。
- DCL:Data Control Language,数据控制语句,定义数据库、表、用户的访问权限和安全级别,关键字包括 grant, revoke。
另外:由 select 关键字构成的DQL查询语句。
DDL:数据定义语句
数据库操作
创建数据库
create database [if not exists] db_name character set utf8 collate utf8_general_ci;在创建数据库时,需要指定字符编码和字符排序规则
ci 是 case insensitive 首字母组合, 即大小写不敏感,a 和 A 在字符判断中被 当做一样的。
utf8_general_ci 不区分大小写,这个在注册用户名和邮箱的时候有用。
utf8_general_cs 区分大小写
utf8_bin 字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容
MySQL 有两个支持 unicode 的 character set:ucs2,使用 16 bits 来表示一个 unicode 字符;
utf8,使用 1~3 bytes 来表示一个 unicode 字符。查看数据库创建信息
show create database db_name;列出所有数据库
show databases;选择数据库
use db_name;查看当前所在数据库
select database();修改数据库
alter database db_name character set utf8 ;删除数据库
drop database [if exists] db_name;
表操作
创建表
create table tb_name(column1_name column1_type(length) not/default null comment '注释',column2_name column3_type,.....);查看表创建信息
show create table tb_name;查看表信息
desc tb_name;列出所有表
show tables;选中表
use tb_name;重命名表
alter table tb_name rename [to] new_tb_name; //mysql特有 示例: ALTER TABLE stu RENAME student; ALTER TABLE stu RENAME TO student;删除表
drop table tb_name;重建表(先清空,再重建表结构)
truncate tb_name;
字段操作
增加字段,默认在表尾增加
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);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;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;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);DROP COLUMN:删除表字段
alter table tb_name drop column_name -- 示例: ALTER TABLE student DROP address;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 语句主要用于管理数据库系统中的对象的权象,开发较少使用。
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;REVOKE: 解除用户访问权限
REVOKE ALTER ON db_name.* FROM 'user_name'@'%';DENY:拒绝用户访问
注意:本文归作者所有,未经作者允许,不得转载