目录
一、SQL概述和分类
1、概述
2、sql语言分类
二、DDL 数据定义语言
1、操作数据库
2.1.1 创建数据库
2.1.2 查看数据库
2.1.3 修改数据库
2.1.4 删除数据库
2.1.5 其他
2、操作表
2.2.1 创建表
2.2.2 其他表操作
三、DML 数据操作语言
1、INSERT
2、UPDATE
3、DELETE
4、日期类型
四、sql中的运算符
1、算术运算
2、赋值运算
3、逻辑运算
4、关系运算
五、DCL 数据控制语言
1、创建用户
2、用户授权
3、删除用户
SQL(Structure Query Language)结构化查询语言。
SQL被美国国家标准局(ANSI)确定为关系型数据库美国标准,后被国际化标准组织(ISO)采纳为关系型数据库的国际化标准。
各数据库厂商都支持ISO的SQL标准,也在标准基础之上做了扩展。
CRUD操作:Create、Read、Update、Delete
DDL(Data Definition Language)
数据定义语言。用来定义数据库对象:库、表、列等。
DML(Data Manipulation Language)
数据操作语言。用来定义数据库记录(数据)增删改。
DCL(Data Control Language)
数据库控制语言。用来定义数据库安全权限和访问级别。
DQL(Data Query Language)
数据库查询语言。用来查询数据库记录(数据)。
编码方式: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;
查看当前服务器中所有数据库
show databases;
查看数据库定义信息
show create database mydb1;
alter database mydb1 character set utf-8;
drop database mydb1;
查看当前使用数据库
select database();
切换使用数据库
use mydb2;
语法:
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" |
删除表
// 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针对表中对的数据进行增(INSERT)删(DELETE)改(UPDATE)。
注意点:
mysql中,字符串和日期都需要使用单引号括起来;空值:null。
基本用法:
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');
注意:
语法:
update 表名 set 列名1=值1,列名2=值2......where 列名=值;
语法:
delete from 表名 [where 列名=值];
truncate table 表名;
注意:
date:yyyy-MM-dd (年月日)
time:hh:mm:ss (时分秒)
datetime:yyyy-MM-dd hh:mm:ss (年月日时分秒)
获取当前时间:now();
加(+)减(-)乘(*)除(/)取余(%)
= 赋值方向:从右往左赋值
且(and )或(or )非(not )
大于(> ) 小于(< ) 大于等于(>= ) 小于等于(<= ) 不等于(!= 或者 <> ) 等于(= )
create user 用户名@localhost identified by 密码; 本地用户才能登陆
create user test@localhost identified by 'test@123';
create user 用户名@客户端IP identified by 密码; 指定IP才能登陆
create user [email protected] identified by 'test@123';
create user 用户名@'%' identified by 密码; 任意IP均可登陆
create user test@'%' identified by 'test@123';
权限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@'%';
drop user 用户名@IP;
drop user test@'%';