一、概述
SQL:Structure Query Language(结构化查询语言),SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。
- 各数据库厂商都支持ISO的SQL标准——普通话
- 各数据库厂商在标准的基础上做了自己的扩展——方言
- SQL 是一种标准化的语言,它允许你在数据库上执行操作,如创建项目,查询内容,更新内容,并删除条目等操作。
(CRUD操作:Create, Read, Update, and Delete)
二、SQL语句分类
- DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。
- DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。
- DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
- DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。
注意:sql语句以;结尾;mysql中的关键字不区分大小写
三、DDL操作数据库
1. 创建
CREATE DATABASE语句用于创建新的数据库:
(编码方式:gb2312,utf-8,gbk,iso-8859-1)
//create database 数据库名
CREATE DATABASE mydb1;
//create database 数据库名 character set 编码方式
CREATE DATABASE jasondb character SET GBK;
//create database 数据库名 set 编码方式 collate 排序规则
CREATE DATABASE mydb3 character SET GBK COLLATE gbk_chinese_ci;
2. 查看数据库
① 查看当前数据库服务器中的所有数据库
//show databases;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| jasondb |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
② 查看前面创建的jasondb数据库的定义信息
//show create database 数据库名;
mysql> show create database jasondb;
+----------+-----------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------------------------------------------+
| jasondb | CREATE DATABASE `jasondb` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
3. 修改数据库
查看服务器中的数据库,并把mydb2的字符集修改为utf8;
//alter database 数据库名 character set 编码方式
mysql> alter database mydb2 character set utf8;
Query OK, 1 row affected, 1 warning (0.24 sec)
4. 删除数据库
//drop database 数据库名
mysql> DROP DATABASE mydb2;
Query OK, 0 rows affected (0.16 sec)
5. 其他语句
① 查看当前使用的数据库
//Select database();
mysql> Select database();
+------------+
| database() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)
② 切换数据库:
//use 数据库名;
mysql> USE jasondb;
Database changed
四、DDL操作表
① 创建表:
创建一个表名为students,列名分别为学生学号(stuid)和学生姓名(stuname)。
CREATE TABLE 表名(
列名1 数据类型 [约束],
列名2 数据类型 [约束],
列名n 数据类型 [约束]
);
create table students(
stuid int,
stuname varchar(20)
);
▲ 表名,列名是自定义,多列之间使用逗号间隔,
▲ 最后一列的逗号不能写
▲ [约束] 表示可有可无
常用数据类型
▲ int:整型
▲ double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;默认支持四舍五入
▲ char:固定长度字符串类型; char(10) 'aaa ’ 占10位
▲ varchar:可变长度字符串类型; varchar(10) ‘aaa’ 占3位
▲ text:字符串类型,比如小说信息;
▲ blob:字节类型,保存文件信息(视频,音频,图片);
▲ date:日期类型,格式为:yyyy-MM-dd;
▲ time:时间类型,格式为:hh:mm:ss
▲ timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋
▲ datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
② 删除表:
//drop table 表名;
DROP TABLE table_name;
③ 修改表名:
alter table 旧表名 rename 新表名;
案例:
alter table user rename users;
④ 当前数据库中的所有表
//SHOW TABLES;
案例:
mysql> SHOW TABLES;
+-------------------+
| Tables_in_jasondb |
+-------------------+
| grade |
| score |
| student |
| subject |
+-------------------+
4 rows in set (0.00 sec)
⑤ 查看表的字段信息
//desc 表名;
案例:
mysql> DESC student;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| stuid | int | NO | PRI | NULL | |
| stuname | varchar(5) | NO | | NULL | |
| password | varchar(10) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| gid | int | YES | MUL | NULL | |
| telphone | varchar(20) | YES | | NULL | |
| address | varchar(20) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| email | varchar(30) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
9 rows in set (0.00 sec)
⑥ 增加列
alter table 表名 add 新列名 新的数据类型
案例:
ALTER TABLE employee ADD image blob;
⑦ 修改列
alter table 表名 change 旧列名 新列名 新的数据类型
案例:
//修改job列,使其长度为60。
ALTER TABLE employee MODIFY job varchar(60);
ALTER TABLE employee change job job varchar(60);
//列名name修改为username
ALTER TABLE user CHANGE name username varchar(100);
⑧ 删除列
alter table 表名 drop 列名;
案例:
//删除image列,一次只能删一列。
ALTER TABLE employee DROP image;
五、DML操作
▲ DML是对表中的数据进行增、删、改的操作。
▲ 主要包括:INSERT 、UPDATE、 DELETE
1. 插入数据
student
| stuname | stuage | stusex | birthday |
|---|---|---|---|
| 张三 | 18 | 男 | 2000-1-1 |
| 李四 | 18 | 男 | 2000-1-1 |
insert into 表名(列名) values(数据值);
//案例:
insert into student(stuname,stuage,stusex,birthday) values('张三1',18,'a','2000-1-1');
//同时添加多行
insert into student(stuname,stuage,stusex,birthday)
values('张三3',18,'a','2000-1-1'),
('张三4',18,'a','2000-1-1'),
('张三5',18,'a','2000-1-1'),
('张三6',18,'a','2000-1-1'),
('张三7',18,'a','2000-1-1'),
('张三8',18,'a','2000-1-1');
▲ 多列和多个列值之间使用逗号隔开
▲ 列名要和列值一一对应
▲ 非数值的列值两侧需要加单引号
▲ 参数值不要超出列定义的长度
▲ 如果插入空值,请使用null
▲ 插入的日期和字符一样,都使用引号括起来。
2. 修改数据
UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值
案例:
update student set stuname = '张三' where stuid = 110;
3. 删除数据
DELETE from 表名 WHERE 列名=值
案例:
delete from student where stuid = 111;
TRUNCATE TABLE student where stuid = 111;
? DELETE 删除表中的数据,表结构还在;删除后的数据可以找回
? TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。删除的数据不能找回。执行速度比DELETE快。
六、DCL操作
1. 创建用户
create user 用户名@指定ip identified by 密码;
create user test123@localhost IDENTIFIED by 'test123';
create user 用户名@客户端ip identified by 密码; (指定IP才能登陆)
create user test456@10.4.10.18 IDENTIFIED by 'test456';
create user 用户名@‘% ’ identified by 密码 (任意IP均可登陆)
create user test7@'%' IDENTIFIED by 'test7';
2. 用户授权:
① grant 权限1,权限2,…,权限n on 数据库名.* to 用户名@IP;
——给指定用户授予指定指定数据库指定权限
grant select,insert,update,delete,create on
chaoshi.* to 'test456'@'127.0.0.1';
② grant all on . to 用户名@IP
——给指定用户授予所有数据库所有权限
grant all on *.* to 'test456'@'127.0.0.1'
3. 用户权限查询:
show grants for 用户名@IP;
show grants for 'root'@'%';
4. 撤销用户权限:
revoke 权限1,权限2,…,权限n on 数据库名.* from 用户名@IP;
REVOKE SELECT ON *.* FROM 'root'@'%' ;
5. 删除用户:
drop user 用户名@IP;
drop user test123@localhost;