SQL语言(基础)

一、概述

SQL:Structure Query Language(结构化查询语言),SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。

  • 各数据库厂商都支持ISO的SQL标准——普通话
  • 各数据库厂商在标准的基础上做了自己的扩展——方言
  • SQL 是一种标准化的语言,它允许你在数据库上执行操作,如创建项目,查询内容,更新内容,并删除条目等操作。
    (CRUD操作:Create, Read, Update, and Delete)

二、SQL语句分类

  1. DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。
  2. DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。
  3. DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
  4. 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

stunamestuagestusexbirthday
张三182000-1-1
李四182000-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;

版权声明:本文为weixin_46831561原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。