SQL语言简介,sql语言分类(DDL,DML,DCL,DQL),MySQL增删改查

一、简介

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

各数据库厂商都支持ISO的SQL标准,普通话

各数据库厂商在标准的基础上做了自己的扩展,方言

SQL 是一种标准化的语言,它允许你在数据库上执行操作,如创建项目,查询内容,更新内容, 并删除条目等操作。

Create, Read, Update, and Delete 通常称为CRUD操作(CRUD在以后的开发中占比重还是不小的哦)

二、sql语言的分类(DDL, DML, DCL, DQL)

  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。
  • DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。
  • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
  • DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。

mysql注意:

  • 语法中,不区分大小写
  • 语句结尾都已英文状态分号 “ ; ” 结尾,回车运行
  • 所有符号都为英文状态下
  • #单行注释
  • -- 单行注释 (--后面有一个空格)
  • /* */ 多行注释

三、DDL(数据定义语言)

1、创建数据库

CREATE DATABASE 数据库名;

CREATE DATABSE 数据库名 CHARACTER SET 编码方式;

常见的编码方式:gb2312,utf-8,gbk,iso-8859-1

 

 CREATE DATABASE 数据库名 CHARACTER SET 编码方式 COLLATE 排序规则;

 2、查看数据库

//查看当前数据库服务器中的所有数据库
SHOW DATABASES;

 SQL语言简介,sql语言分类(DDL,DML,DCL,DQL),MySQL增删改查_第1张图片

//查看前面创建的myddl数据库的定义信息
show create database myddl;

3、修改数据库

alter database 数据库名 character set 编码方式

//alter database 数据库名 character set 编码方式
alter database myddl character set utf8;

4、删除数据库

drop database 数据库名;

//drop database 数据库名;
drop database myddl;

 

5、查看当前使用的数据库

select database();

Select database();

 SQL语言简介,sql语言分类(DDL,DML,DCL,DQL),MySQL增删改查_第2张图片

6、切换数据库(使用数据库)

use 数据库名;

use myddl;

SQL语言简介,sql语言分类(DDL,DML,DCL,DQL),MySQL增删改查_第3张图片

 四、DML(数据操作语言)

1、创建新表。

语法

CREATE TABLE 表名(
列名1 数据类型 [约束],
列名2 数据类型 [约束],
列名n 数据类型 [约束]
);

常用数据类型:

  • 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

注意:

        多列之间使用逗号隔开,最后一列不用(列指的是与列名所有相关的类型属性,约束等称为一列),约束可有可无,不管是列名还是表明都不区分大小写。

栗子:

 create table student(
     name varchar(10),
     age int,
     id varchar(20)
     );

Query OK, 0 rows affected (0.06 sec)

2、查看表

show tables;

//查看所有表 
show tables;

//运行结果
+---------------+
| Tables_in_lyj |
+---------------+
| student       |
+---------------+
1 row in set (0.00 sec)

3、查看表的字段信息

desc 表名;

//desc 表名;
desc student;

//运行结果
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
| id    | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

4、增加列

alter table 表名 add 新列名 新的数据类型;

//在student表里增加一个性别列
alter table student add sex char(2);

//运行结果
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

//查看修改后的表
desc student;

//运行结果
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
| id    | varchar(20) | YES  |     | NULL    |       |
| sex   | char(2)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

5、修改列

alter table 表名 change 旧列名 新列名 新的数据类型;

//将student表中的id列,名字改为 number
alter table student change id number varchar(20);

//运行结果
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

//查看修改后的表
desc student;

//运行结果
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name   | varchar(10) | YES  |     | NULL    |       |
| age    | int         | YES  |     | NULL    |       |
| number | varchar(20) | YES  |     | NULL    |       |
| sex    | char(2)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

6、删除列(一次只能删除一列)

alter table 表名 drop 列名;

# 删除number列
alter table student drop number;

# 运行结果
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

desc student;

# 运行结果
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
| sex   | char(2)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

7、修改表名

alter table 旧表名 rename 新表名;

#将student表名修改为users
alter table student rename users;

#运行结果
Query OK, 0 rows affected (0.02 sec)

show tables;

#运行结果
+---------------+
| Tables_in_lyj |
+---------------+
| users         |
+---------------+
1 row in set (0.00 sec)

8、查看表格创建细节

show create table 表名;

#显示users表创建细节
show create table users;


# 运行结果
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                          |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
| users | CREATE TABLE `users` (
  `name` varchar(10) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `sex` char(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

9、修改表的字符集

alter table 表名 character set 编码方式;

#修改表的字符集为gbk

alter table users character set gbk;

#运行结果
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

10、删除表

drop table 表名;

drop table users;

# 运行结果
Query OK, 0 rows affected (0.02 sec)

#显示所有表
show tables;

#运行结果
Empty set (0.00 sec)

 表名 card(会员卡表)
列名          数据类型
cardid        int
cardnum    varchar(20)
regDate      date

需求: (1)创建该表 (2)将card表名修改为CardInfo (3)添加delDate(注销时间) 列到表中 (4)将cardnum改为varchar(30) (5)删除regDate列 (6)删除cardInfo表

create table card (
    -> cardid int,
    -> cardnum varchar(20),
    -> regDate date
    -> );

Query OK, 0 rows affected (0.03 sec)

mysql> #将card表名修改为CardInfo
mysql> alter table card rename CardInfo;
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+---------------+
| Tables_in_lyj |
+---------------+
| cardinfo      |
+---------------+
1 row in set (0.00 sec)

mysql> # 添加注销时间(delDate)列表中
mysql> alter table cardindo add delDate date;
ERROR 1146 (42S02): Table 'lyj.cardindo' doesn't exist
mysql>

mysql> alter table cardinfo add delDate date;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> #上面是报错是因为表名写错了,大家以后也要注意呀,咩哈哈哈
mysql> # 将cardnum 改为varchar(30)
mysql> alter table cardinfo change cardnum cardnum varchar(30);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc cardinfo;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| cardid  | int         | YES  |     | NULL    |       |
| cardnum | varchar(30) | YES  |     | NULL    |       |
| regDate | date        | YES  |     | NULL    |       |
| delDate | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql># 删除regDate列
mysql>
mysql> alter table cardinfo drop regdate;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> # 删除cardinfo表
mysql>
mysql> drop table cardinfo;
Query OK, 0 rows affected (0.02 sec)

mysql>

四、DML(数据操作语言)

DML是对表中的数据进行增、删、改的操作。

主要包括:INSERT 、UPDATE、 DELETE

1、增加数据(insert)

1.1、插入一行数据

insert into 表名(列名1, 列名2, ……, 列名n)values (列值1, 列值2,……, 列值n);

insert into student(name,age, sex) values ('大锤',10, '女');

#  运行结果
Query OK, 1 row affected (0.01 sec)

注意:

1、多列和多个列值之间使用逗号隔开
2、列名要和列值一一对应
3、非数值的列值两侧需要加单引号
4、字符串类型和日期类型都要用单引号括起来。
 

特殊情况:

当给所有列添加数据的时候,可以将列名省略 ,此时列值的顺序按照数据表中列的顺序执行

insert into 表名 values(列值1, 列值2,……, 列值n)

insert into student values('锤锤',8,'男');

#运行结果
Query OK, 1 row affected (0.01 sec)

1.2、插入多行数据

insert into 表名(列名1, 列名2, ……, 列名n)value (列值1, 列值2,……, 列值n),
                                                                                     (列值1, 列值2,……, 列值n),
                                                                                      (列值1, 列值2,……, 列值n);

insert into student(name,age, sex) values ('2锤',9, '男'),
                                         ('小锤', 2, '女');

#运行结果
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

注意:

1、列名与列值的类型、个数、顺序要一一对应。

2、参数值不要超出列定义的长度。

3、如果插入空值,请使用null

4、插入的日期和字符一样,都使用引号括起来。

 2、修改(更新)数据(update)

UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值

SQL语言简介,sql语言分类(DDL,DML,DCL,DQL),MySQL增删改查_第4张图片 在这个表中
将所有员工薪水修改为5000元。
将姓名为’lisi’的员工薪水修改为3000元。
将姓名为’aaa’的员工薪水修改为4000元,resume改为ccc。
将你好的薪水在原有基础上增加1000元。 

-- 将所有员工薪水修改为5000元
update emp set salary = 5000;

-- 将姓名为’lisi’的员工薪水修改为3000元。
UPDATE emp SET salary = 3000 WHERE `name` = "lisi";

-- 将姓名为’aaa’的员工薪水修改为4000元,resume改为ccc。
UPDATE emp SET salary = 4000,resume = 'ccc' WHERE `name` = 'aaa';
-- 将你好的薪水在原有基础上增加1000元。 
UPDATE emp SET salary = salary + 1000 WHERE `name` = '你好';

全部执行完后的表:

SQL语言简介,sql语言分类(DDL,DML,DCL,DQL),MySQL增删改查_第5张图片

3、删除表数据(delete)

DELETE from 表名 【WHERE 列名=值】
中括号中的可以省略

首先有个表他之前长这样:

SQL语言简介,sql语言分类(DDL,DML,DCL,DQL),MySQL增删改查_第6张图片

然后经过一顿代码操作之后:

-- 删除工资3000的人的数据
delete from emp where salary = 3000;

最后拉个表就长这样了:

SQL语言简介,sql语言分类(DDL,DML,DCL,DQL),MySQL增删改查_第7张图片

注意:

删除表中所有数据,可以使用   TRUNCATE TABLE 表名;
也可以使用 delete from 表名;

区别:

  • DELETE 删除表中的数据,表结构还在;删除后的数据可以找回
  • TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。 -删除的数据不能找回。执行速度比DELETE快。

五 、DQL(数据查询语言)

DML是对表中的数据进行查询的操作。

主要包括:SELECT

数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。

查询返回的结果集是一张虚拟表。

语法:

SELECT 列名 FROM 表名 【WHERE --> BROUP BY-->HAVING--> ORDER BY】

多个列名之间用逗号隔开,最后一个列名不加
SELECT 列名1, 列名2, ……, 列名n FROM 表名 【WHERE --> BROUP BY-->HAVING--> ORDER BY】

列名用 * 表示,表示查询所有列
SELECT * FROM 表名 【WHERE --> BROUP BY-->HAVING--> ORDER BY】

SELECT 要查询的列名称
FROM 表名称
WHERE 限定条件 /*行条件*/
GROUP BY grouping_columns /*对结果分组*/
HAVING condition /*分组后的行条件*/
ORDER BY sorting_columns /*对结果分组*/|
LIMIT offset_start, row_count /*结果限定*/

六、DCL(数据控制语言)

1、创建用户

1.1  create user 用户名@指定ip identified by '密码'; 

create user yun@localhost IDENTIFIED by 'test123';

创建成功后可以进行测试 mysql -u 用户名 -p 密码 , 能够进入,表示创建成功

SQL语言简介,sql语言分类(DDL,DML,DCL,DQL),MySQL增删改查_第8张图片

1.2、 create user 用户名@客户端ip identified by '密码';     指定IP才能登陆

1.3、 create user 用户名@‘% ’ identified by '密码';      任意IP均可登陆

2、用户授权

  • grant 权限1,权限2,........,权限n on 数据库名.* to 用户名@IP;  给指定用户授予指定指定数据库指定权限
-- 授予用户 yun 对数据库 myddl 增删改查创建的权限
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON myddl.* TO yun@localhost;
  • grant all on *.* to 用户名@IP;     给指定用户授予所有数据库所有权限
-- 授予yun用户所有数据库的所有权限
GRANT ALL ON *.* TO yun@localhost;

3、用户权限查询

show grants for 用户名@IP;

-- 查询yun用户的权限
SHOW GRANTS FOR yun@localhost;

4、撤销用户权限

revoke 权限1,权限2,........,权限n on 数据库名.* from 用户名@IP;

-- 撤销yun 用户对所有数据库的增删改权限
REVOKE INSERT,DELETE,UPDATE ON *.* FROM yun@localhost;

5、删除用户

drop user 用户名@IP;

-- 删除yun用户
DROP USER yun@localhost;

你可能感兴趣的:(mysql,mysql,数据库,sql,java)