SQL语句基础指令语法
显示命令
显示当前数据库服务器中的数据库列表
mysql> SHOW DATABASES;
显示数据库中的数据表
mysql> USE 数据库名 #切换数据库
mysql> SHOW TABLES;
显示数据表的结构
mysql> DESCRIBE 表名;
mysql> DESC 表名;
查看支持的字符集
mysql> SHOW CHARACTER SET;
查看支持的排序规则
mysql> SHOW COLLATION;
查看支持的引擎
mysql> SHOW ENGINES\G; #\G以行的形式显示
查看表中的索引
mysql> SHOW INDEXES FROM 表名\G;
查看表状态
mysql> SHOW TABLE STATUS LIKE '表名'\G;
DDL语句
DDL:数据的定义语言(Data Defination Language)
CREATE
创建用户
mysql> CREATE USER root@'172.18.%.%' IDENTIFIED BY 'password';
创建数据库
mysql> CREATE DATABASE 数据库名1;
mysql> CREATE SCHEMA 数据库名2;
mysql> CREATE DATABASE IF NOT EXISTS 数据库名3;
创建一个同表1相同的表2
mysql> CREATE TABLE 表2 SELECT * FROM 表1;
创建表
mysql> CREATE TABLE 表名 (id tinyint unsigned PRIMARY KEY,name varchar(20) NOT NULL, age tinyint UNSIGNED, sex char(1) DEFAULT "m" );
创建带有复合主键的表
mysql> CREATE TABLE 表名 (id int unsigned NOT NULL, name varchar (20) NOT NULL, age tinyint unsigned, sex char(1) DEFAULT "m", PRIMARY KEY(id,name));
创建索引
mysql> CREATE INDEX 索引名 ON 表名(索引字段);
DROP
删除用户
mysql> DROP USER root@'172.18.%.%;
删除数据库
mysql> DROP DATABASE 数据库名;
mysql> DROP SCHEMA 数据库名;
mysql> DROP DATABASE IF EXISTS 数据库名;
删除表
mysql> DROP TABLES 表名;
删除索引
mysql> DROP INDEX 索引名 ON 表名;
ALTER
修改表名
mysql> ALTER TABLE 旧表名 RENAME 新表名;
表中插入字段
mysql> ALTER TABLE 表名 ADD 字段名 char(11) AFTER 插入位置的前一个字段名;
修改字段数据类型
mysql> ALTER TABLE 表名 MODIFY 字段名 新数据类型;
修改字段名称
mysql> ALTER TABLE 表名 CHANGE COLUMN 旧字段 新字段 char(11);
添加唯一键
mysql> ALTER TABLE 表名 ADD UNIQUE KEY(字段名);
添加指定枚举值的字段
mysql> ALTER TABLE 表名 ADD 字段名 ENUM('值1','值2');
添加索引
mysql> ALTER TABLE 表名 ADD INDEX(字段名);
删除字段
mysql> ALTER TABLE 表名 DROP COLUMN 字段名;
DML语句
DML:数据的处理语言(Data Manipulation Language )
INSERT
赋值表中全部字段
mysql> INSERT INTO 表名 (字段1,字段2,字段3,字段4)VALUES(值1,'值2',值3,'值4');
赋值表中指定字段
mysql> INSERT INTO 表名 (字段1,字段2)VALUES(值1,'值2');
省略字段名称赋值
mysql> INSERT INTO 表名 VALUES (值1,'值2',值3,'值4');
同时为多条记录赋值
mysql> INSERT INTO 表名 VALUES (值1,'值2',值3,'值4'),(值1,'值2',值3,'值4');
向表2中追加表1字段的值,前提表2已经存在,且与表1表结构相同
mysql> INSERT INTO 表2 SELECT * FROM 表1;
DELETE
清空表的内容
mysql> TRUNCATE TABLE 表名; #速度快,但不记录日志
mysql> DELETE FROM 表名; #速度稍慢,但会记录日志
删除记录
mysql> DELETE FROM 表名 WHERE id=4;
UPDATE
注意:更改时不要忘记敲WHERE子句,不然会改掉全部记录对应字段的值
更改指定记录某字段的值
mysql> UPDATE 表名 SET age=21 WHERE name='li';
同时更改一条记录多个字段的值
mysql> UPDATE 表名 SET age=19,sex='m' WHERE id=5;
DCL语句
DCL:数据授权语言(Data Control Language)
GRANT
授权用户指定权限
mysql> GRANT SELECT,INSERT ON 数据库名.表名 TO root@'172.18.%.%';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO user@'localhost';
授权用户全部权限
mysql> GRANT ALL ON 数据库名.* TO root@'172.18.%.%';
授权并创建用户
mysql> GRANT ALL ON *.* TO wang@'172.18.%.%' IDENTIFIED BY "password";
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO user@localhost IDENTIFIED BY ""; #设置空口令
REVOKE
取消指定授权
mysql> REVOKE SELECT,INSERT ON 数据库名.* FROM root@'172.18.%.%';
取消授权
mysql> REVOKE ALL ON 数据库名.* FROM root@'172.18.%.%';
DQL语句
DQL:数据查询语言(Data Query Language)
SELECT
查询数据库名
mysql> SELECT DATABASE();
查询当前数据库版本
mysql> SELECT VERSION();
查看当前登录的用户
mysql> SELECT USER();
查询表中全部字段
mysql> SELECT * FROM 表名;
查询表中指定字段
mysql> SELECT 字段1,字段2,字段3 FROM 表名;
为搜索字段添加别名
mysql> SELECT id AS 员工编号,name AS 姓名 FROM 表名;
为表名添加别名
mysql> SELECT 字段1,字段2 FROM 表名 AS 表别名;
查寻指定区间内的字段
mysql> SELECT * FROM 表名 WHERE 字段 >=18 and 字段 <=20;
mysql> SELECT * FROM 表名 WHERE 字段 BETWEEN 18 字段 20;
对查询的指定字段进行排序
mysql> SELECT * FROM 表名 WHERE 字段1 BETWEEN 16 字段1 22 ORDER BY 字段1;
mysql> SELECT * FROM 表名 WHERE 字段1 BETWEEN 16 字段1 22 ORDER BY 字段1 DESC; #倒序排
跳过一个显示两个
mysql> SELECT * FROM 表名 WHERE 字段1 BETWEEN 16 字段1 22 ORDER BY 字段1 LIMIT 1,2;
通配符的模糊查询
mysql> SELECT * FROM 表名 WHERE name LIKE "l%" ;
正则表达式的模糊查询
mysql> SELECT * FROM 表名 WHERE name RLIKE "l.*" ;
mysql> SELECT * FROM 表名 WHERE name RLIKE "^l.$" ;
查询空值
mysql> SELECT * FROM 表名 WHERE age IS NULL;
查询非空值
mysql> SELECT * FROM 表名 WHERE age IS NOT NULL;
查询某字段的特定值
mysql> SELECT * FROM 表名 WHERE 字段名 IN ('值1','值2');
多表查询
mysql> SELECT s.id,e.name FROM 表名1 AS s,表名2 AS e WHERE s.id=e.id;
mysql> SELECT s.id,e.name FROM 表名1 AS s,表名2 AS e WHERE s.id=e.id and s.name RLIKE '.*[no].*';