简介
SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,SQL可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息
1.SQL的基本分类
1、 DDL 数据定义语言:对数据库的创建和删除 以及对数据库表的创建删除和修改 关键字:create、drop 2、 DML 数据操作语言:对数据库表中数据的增 删 改 关键字:insert、delete、update 3、 DQL 数据查询语言:对数据库表中数据 查询 关键字:select 4、 DCL 数据控制语言:指定用户 分配权限 关键字:grant、revoke 5、 事务
2. DDL(创建、删除)
Data Definition Language数据定义语言 关键字: create drop alter 一、 库的基本操作 1. 查看所有的数据库 show databases; 2. 创建数据库 create database if not exists 库名; 3. 删除数据库 drop database if exists 库名; 4. 选中库 use 库名; 5. 查看创建数据库语句 show create database 库名;
二、 表的操作
1. 查看所有表
show tables;
2. 创建表
create table if not exists 表名(列名 类型 【约束】,列名 类型 【约束】,....);
3. 删除表
drop table if exists 表名;
4. 查看表结构
desc 表名;
5. 查看创建表语句
show create table 表名;
三、mysql数据库中的数据类型
① 整型:tinyint/smallint/int/bigint
② 浮点型:float double
③ 字符型
varchar(n) 变长字符串 n必选 保存字符最大个数 性能低
char(n) 定长字符串 n可选 默认为1 保存字符最大个数 性能高
char 最多存放255个字符
varchar最多可以存放65532个字符
④ 日期
date 日期 年月日
datetime 日期 年月日时分秒 8 个字节 1900 9999
2020-10-15 11:43:12
time 时分秒
timestamp 时间戳 4个字节 1970开始 2038年
3.DDL(修改)
1.修改列名
alter table 表名 change 【column】 原列名 新列名 类型;
3. 修改列的类型
alter table 表名 modify 【column】列名 新类型;
4. 添加列
alter table 表名 add 【column】 列名 类型;
5. 删除列
alter table 表名 drop 【column】 列名;
4.DML
Data Manipulation Language数据操作语言
关键字: 增insert 删delete 改update
插入
1. 不指定字段插入单个 (表中字段对应值)
insert into 表名 values(值1,值2,....);
# insert into 表名 values(值1,值2,....);
insert into user values(1,'小马哥',18,'男');
# insert into user values(2,'小马弟','男'); 错误原因:值的数量 和 字段的数量不匹配
#insert into user values(2,'小马弟','男',18); 错误原因: 值的顺序和字段的默认顺序不匹配
2. 指定字段插入单个
insert into 表名(列名1,列名2,...) values(值1,值2,....);
insert into user(name,age,sex,id) values('小朱哥',38,'男',3);
insert into user(name,sex,id) values('小朱姐','男',4);
3. 插入多条数据
insert into 表名(列名1,列名2,...) values(值1,值2,....),(值1,值2,....),......
insert into user(id,name,age,sex) values
(5,'张三',10,'男'),(6,'李四',12,'女'),
(7,'张三2',11,'男'),(8,'李四2',13,'女');
注意:
1. 整型、浮点型 不需要加引号 ,字符型和日期类型 需要加引号
2. 插入的值必须满足类型和约束
3. 值和列名一一对应
4. 如果约束是 null 和 default 可以不插入
修改
update 表名 set 列名1=新值1,列名2=新值2,... where 条件;
update user set age = 16 where id = 4;
update user set age = age + 10 where sex = '男';
update user set age = 16,name='小宝',sex = '男' where id = 4;
注意:修改记住要加条件 where
删除
1. 删除单个
delete from 表名 where 条件;
注意:删除记住要加条件 where
-- delete from 表名 where 条件;
delete from user where id = 4;
-- 删除所有男生
delete from user where sex = '男';
2. 删除所有
① delete from 表名;
② truncate table 表名;
【面试题】
简述delete删除和truncate删除的区别
1. delete 删除 后可以接where条件 truncate不可以
2. delete 删除一个一个删除 truncate删除整个表 再创建一个新表
truncate删除效率高
3. delete支持事务 truncate不支持事务
4. delete删除自增值再次插入自增继续接着自增
truncate 删除自增从新从1开始
5.DCL (权限,用户)
目前我们使用的是root用户,这是超级管理员。可以创建root以外的用户,给这些用户赋予权限
-- 查询当前数据库的所有用户
-- 语法 select * from 数据库.表
select * from mysql.user;
-- 创建新用户 默认是没有权限
-- 语法 create user '用户名' @'%' IDENTIFIED by '密码'
create user 'lisi' @'%' IDENTIFIED by '123456'
-- 为zhangsan分配权限 分配offcnoa数据库中所有表的查询权限
-- 语法 grant 权限(select、insert、update、delete) on 数据库.表名 to '用户名'@'%'
grant select on myemployees.* to 'lisi' @'%';
-- 为张三分配权限 分配offcnoa数据库中所有表的crud权限
grant all on myemployees.* to 'lisi' @'%';
-- 取消zhangsna对offcnoa中表的所有权限
-- 语法 REVOKE 权限(select、insert、update、delete) on 数据库.表名 from '用户名'@'%'
REVOKE all on myemployees.* from 'lisi' @'%';
-- 删除用户 zhangsan
-- 语法 DROP USER '用户名'@'%';
DROP USER 'lisi'@'%';
-- 查看用户的权限
-- 语法 SHOW GRANTS FOR '用户名'@'%';
SHOW GRANTS FOR 'xiaoming'@'%';
6.mysql的约束
mysql常见的约束
① 理解:用于额外的限定当前列中的值 保证数据的准确性 和 可靠性
② 常见约束
1. not null 不能为空
2. unique 唯一约束 该列下的值不允许重复 但是null可以有多个
3. primary key 主键约束
该列下的值不能重复 不能为null 提高查询的效率 一个表通常只有一个主键
4. default 默认约束 指定默认值
5. foreign key 外键约束
限定两个表之间的关系, 从一个表中(从表)某一列的值 来源于另一个表(主表)的主键值
7.约束操作
添加约束
建表时创建
create table table_name(
列名1 数据类型 (int) primary key auto_increment,
列名2 数据类型 not null,
列名3 数据类型 unique,
列名4 数据类型 default '值',
constraint 索引名 foreign key(外键列) references 主键表(主键列)
)
建表后创建( 修改表)
1.主键约束
添加:alter table table_name add primary key (字段)
2.非空约束
添加:alter table table_name modify 列名 数据类型 not null
3.唯一约束
添加:alter table table_name add unique 约束名(字段)
4.自动增长
添加:alter table table_name modify 列名 int auto_increment
5.外键约束
添加:alter table table_name add constraint 约束名 foreign key(外键列)
references 主键表(主键列)
6.添加默认约束
alter table table_name modify 列名 数据类型 default 默认值