目录
一、SQL概述和分类
1、概述
SQL(Structure Query Language)结构化查询语言。
SQL被美国国家标准局(ANSI)确定为关系型数据库美国标准,后被国际化标准组织(ISO)采纳为关系型数据库的国际化标准。
各数据库厂商都支持ISO的SQL标准,也在标准基础之上做了扩展。
CRUD操作:Create、Read、Update、Delete
2、sql语言分类
DDL(Data Definition Language)
数据定义语言。用来定义数据库对象:库、表、列等。
DML(Data Manipulation Language)
数据操作语言。用来定义数据库记录(数据)增删改。
DCL(Data Control Language)
数据库控制语言。用来定义数据库安全权限和访问级别。
DQL(Data Query Language)
数据库查询语言。用来查询数据库记录(数据)。
二、DDL 数据定义语言
1、操作数据库
2.1.1 创建数据库
编码方式:gb2312、gbk、utf8mb4、iso-8859-1
// create database 数据库名
create database mydb1;
// create database 数据库名 character set 编码方式
create database mydb1 character set utf8mb4;
// create database 数据库名 set 编码方式 collate 排序规则
create database mydb1 set GBK collate gbk_chinese_ci;
2.1.2 查看数据库
查看当前服务器中所有数据库
show databases;
查看数据库定义信息
show create database mydb1;
2.1.3 修改数据库
alter database mydb1 character set utf-8;
2.1.4 删除数据库
drop database mydb1;
2.1.5 其他
查看当前使用数据库
select database();
切换使用数据库
use mydb2;
2、操作表
2.2.1 创建表
语法:
create table 表名(
列名1 数据类型 [约束],
列名2 数据类型 [约束],
列名n 数据类型 [约束]
);
说明:
表名、列名自定义,多列之间以逗号隔开,最后一行不写逗号;
约束:可有可无,null 或者 not null 默认null;primary key,描述主键等。
示例:
create table card(
cardid int not null,
cardnum varchar(20),
regDate date
);
常用数据类型:
数据类型 | 描述 |
int | 整型 |
double | 浮点型。double(5,2) 表示最多5位,其中两位必须是小数。 |
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" |
2.2.2 其他表操作
删除表
// drop table 表名;
drop table cardinfo;
查询当前数据库中所有表
show tables;
查看表字段信息
// desc 表名;
desc cardinfo;
增加列
// alter table 表名 add 列名 数据类型;
alter table cardinfo add delDate date;
修改列
// alter table 表名 change 旧列名 新列名 新的数据类型;
alter table cardinfo change cardnum cardnum varchar(30);
删除列
// alter table 表名 drop 列名;
alter table cardinfo drop regDate;
修改表名
// alter table 旧表名 rename 新表名;
alter table card rename CardInfo;
查看创建表细节
show create table 表名;
修改表字符集
alter table 表名 character set 编码方式;
三、DML 数据操作语言
DML针对表中对的数据进行增(INSERT)删(DELETE)改(UPDATE)。
注意点:
mysql中,字符串和日期都需要使用单引号括起来;空值:null。
1、INSERT
基本用法:
insert into 表名(列名) values(数据值);
insert into student(stuname,stuage,stusex,birthday) values('张三1',18,'a','2000-1-1');
注意:
- 多列与多列值之间使用逗号分隔;
- 列名和列值需要一一对应;
- 非数值的列值需要使用单引号括起来;
用法二:
当给所有列添加数据的时候可以将列名省略;
此时列值的顺序按照数据表中列的顺序执行;
insert into student values('李四',12,'1111',189.98,'2000-1-1','男','2007-1-1');
用法三:
同时添加多行数据
insert into 表名(列名) values(第一行数据),(第二行数据)....;
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
语法:
update 表名 set 列名1=值1,列名2=值2......where 列名=值;
3、DELETE
语法:
delete from 表名 [where 列名=值];
truncate table 表名;
注意:
- delete删除数据表中数据,表结构还在;删除后的数据可以找回来。
- truncate是直接把表drop掉,再创建一个新的空表;删除的数据不能找回,执行速度比delete快。
4、日期类型
date:yyyy-MM-dd (年月日)
time:hh:mm:ss (时分秒)
datetime:yyyy-MM-dd hh:mm:ss (年月日时分秒)
获取当前时间:now();
四、sql中的运算符
1、算术运算
加(+)减(-)乘(*)除(/)取余(%)
2、赋值运算
= 赋值方向:从右往左赋值
3、逻辑运算
且(and )或(or )非(not )
4、关系运算
大于(> ) 小于(< ) 大于等于(>= ) 小于等于(<= ) 不等于(!= 或者 <> ) 等于(= )
五、DCL 数据控制语言
1、创建用户
create user 用户名@localhost identified by 密码; 本地用户才能登陆
create user test@localhost identified by 'test@123';
create user 用户名@客户端IP identified by 密码; 指定IP才能登陆
create user test@192.168.16.16 identified by 'test@123';
create user 用户名@'%' identified by 密码; 任意IP均可登陆
create user test@'%' identified by 'test@123';
2、用户授权
权限1,权限2......权限n on 数据库名.* to 用户名@IP;
给指定用户授予指定数据库指定权限;
grant select,insert,delete,update,create on test_db.* to test@'%';
grant all on *.* to 用户名@IP;
grant all on *.* to test@localhost;
用户权限查询
show grants for 用户名@IP;
show grants for root@'%';
权限回收
revoke 权限1,权限2,......权限n on 数据库名.* from 用户名@IP;
revoke all on *.* from test@'%';
3、删除用户
drop user 用户名@IP;
drop user test@'%';