注:图片来自网络
一、结构化语言SQL
对数据库进行查询和修改的语言叫做SQL语言。
二、提示
- SQL 对大小写不敏感:SELECT 与 select 是相同的。
-
MySQL数据库系统要求在每条 SQL 语句的末端使用分号。分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。
-
当你不需要一条语句输出的结果以\c结束,不可以使用ctrl+c,否则登出mysql。
-
我们可以在命令行执行sql语句,要通过mysql -e参数{mysql -e "show databases \G"} 显示到shell上。
-
如果需要获取SQL语句的帮助可以用help命令,如:help create,如果需要进一步获取帮助,可以继续使用help命令,如:help create database。
-
当表特别长的时候“;”前加\G ,则把表向左旋转90度,可以更清楚看到。
- 数据库命名规则:
- 区分大小写
- 唯一性
- 不能使用关键字如 create SELECT
- 不能单独使用数字
三、SQL语言类型
数据查询语言(DQL:Data Query Language): 其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词。
数据操作语言(DML:Data Manipulation Language): 其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
数据控制语言(DCL):(Data Control Language): 它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
数据定义语言(DDL):(Data Define Language): 其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
名词 | 解释 |
---|---|
数据库服务器 | 运行着数据库应用的设备 |
数据库 | 表的管理单元 |
表 | 记录、字段 |
记录 | 字段的管理单元 |
字段 | 字段名,字段类型、长度,字段约束组成 |
类型 | 字符,数字,日期 |
约束 | NULL NOTNULL等 |
四、DDL
date_name:数据库名
tb_name:表名
new_tb_name:新表名
1.create-创建
1)创建数据库
> create datebase date_name;
2)创建表
语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
)[存储引擎 字符集];
==在同一张表中,字段名是不能相同
==宽度和约束条件可选
==字段名和类型是必须的
NULL说明:
1、等价于没有任何值、是未知数。
2、NULL与0、空字符串、空格都不同,NULL没有分配存储空间。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、比较时使用关键字用“is null”和“is not null”。
5、排序时比其他数据都小,所以NULL值总是排在最前。
数据库字段类型和约束条件:Linux 关系型数据库字段类型(数值、字符串、时间)和约束条件-CSDN博客
> create table tb_name(
->id int identity(1,1) not null,
->name varchar(20) null,
->course varchar(20) null,
->grade numeric null);
2.alter-修改
1)修改表名
> alter table tb_name rename new_tb_name;
2)给表添加新字段
> alter table tb_name add math int(10);
> alter table tb_name add (chinese int(10),english int(10));
3)修改字段名称、数据类型、修饰符(约束)
# 修改字段名
> alter table tb_name change chinese china int(6);
# 修改字段名并改变字段位置
> alter table tb_name change english en int(6) after id;
> alter table tb_name modify en int(6) after id;
# 修改字段约束
> alter table tb_name modify chinese int(5) not null;
# 修改字段位置
> alter table tb_name modify en int(6) first;
4)删除字段
> alter table tb_name drop en;
3.drop-删除
1) 删除数据库
> drop database db_name;
2)删除表
> drop table tb_name;
4.truncate-删除
1)删除表
> truncate tb_name;
5.declare、set-定义变量
1)declare在BEGIN和END之间定义变量
> begin
> declare var1 int default 0;
> end
2)set定义变量
> set @ip=86;
详细学习请参考:mysql变量定义(declare,set,@)使用实例讲解 - 张测试 - 博客园 (cnblogs.com)
五、DQL
1.select-查看
sql语句书写顺序:
sql语句执行顺序:
1)查看当前数据库
> select database();
2)查询表中指定字段的值
> select id,name,sex,age from tb_name;
3)查询表中所有字段的值
> select * from tb_name;
4)查询并去掉重复行
> select distinct id from tb_name;
5)查询前n行
> select name from tb_name limit n;
6)查询从第n行开始的后m行即n-(n+m)行
> select name from tb_name limit n,m;
7)没有使用use进入db_name库时查询db_name库的tb_name表
> select name from db_name.tb_name;
> select tb_name.id from db_name.tb_name;
8)查看生效的授权信息
# 查看所有库和表的权限
> select * from mysql.user where user='root'\G;
# 查看具体库的授权信息
> select * from mysql.db where user='user_name'\G;
select可配合排序检索语句、where子句、where子句、正则表达式的使用regexp、语句的拼接和函数使用。
六、DML
1.insert-表中插入数据
1)根据字段插入数据
语法:INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES (值1,值2,值3…值n);
> insert into tb_name(id,name,math,china) values(1,"wing",80,90);
> insert into tb_name set id=6,math=65;
2)根据字段插入多条数据
INSERT INTO 表名 VALUES(值1,值2,值3…值n),(值1,值2,值3…值n), (值1,值2,值3…值n);
> insert into tb_name(id,name,math,china) values(2,"king",70,100),(3,"tom",50,70);
3) 直接插入数据
语法:INSERT INTO 表名 VALUES (值1,值2,值3…值n);
> insert into tb_name values(4,"xiaosan",50,100);
4)复制记录
语法:INSERT INTO 表1(字段1,字段2,字段3…字段n) SELECT (字段1,字段2,字段3…字段n) FROM 表2 WHERE …;
> insert into tb_name1 select * from tb_name2 where id=9;
> insert into tb_name1 select * from tb_name2 where age > 17;
2.update-表中更新数据
1)更新记录
语法:UPDATE 表名 SET 字段1=值1,字段2=值2 WHERE CONDITION;
> update tb_name set name="lili" where id=5;
3.delete-删除表中数据
1)删除表中某条记录
语法:DELETE FROM 表名 WHERE CONITION;
> delete from tb_name where id=6;
2)删除表中全部记录
> delete from tb_name;
七、DCL
user_name:用户名
1.grant-授权
1)授权并设置密码
语法:grant 权限 on 数据库.表 to '用户'@'客户端来源IP地址' identified by '密码';
> grant all privileges on db_name.* to user_name@'%';
# *代表所有表;%代表所有网段
> flush privileges;
# 关于权限方面的修改,注意刷新权限,否则有可能不生效
2.revoke-收回权限
1)取消权限
> revoke all privileges on db_name.* from user_name@'%';
> flush previleges;
八、其他
1.use-切换数据库
1)使用数据库
> use db_name;
2.show-显示查询
1)显示数据库库名
> show db_name;
2) 显示表名
> show tb_name;
3)显示创建过程
> show create table tb_name;
> show create table db_name;
4) 显示表的详细信息
> show table status like 'tb_name' \G;
5) 查看授权语句
语法:show grants for '用户'@'客户端来源IP地址';
> show grants for user_name@'%';
3.desc-显示表结构
1)显示表结构
> desc tb_name;
九、拓展
数据库常见的操作对象 :
以上基本是单表查询的SQL语句用法,如果有读者需要多表查询的SQL语句用法讲解,请在评论区留言,如果需求的人数多,博主会尽快出一期多表查询的文章。