SQL系列之DDL/DCL语言

栏目: 数据库 · 发布时间: 6年前

内容简介:SQL语言主要分为以下四类:数据定义语言(DDL):用于下定义和管理数据对象(库,表,索引,视图),包括数据库,数据表等,例如:CREATE DROP ALTER等语句。
编辑推荐:
本文来自于个人博客,本文主要通过了解增删改查的增删改 ,增删改查的查之简单查询 ,增删改查的查之高级查询介绍DDL和DCL语言,希望对您的学习有所帮助。

SQL语言主要分为以下四类:

数据定义语言(DDL):

用于下定义和管理数据对象(库,表,索引,视图),包括数据库,数据表等,例如:CREATE DROP ALTER等语句。

数据操作语言(DML):

用于操作数据库对象中包含的数据,例如:INSERT UPDATE DELETE语句。

数据查询语言(DQL):

用于查询数据库对象中包含的数据,能够进行单表查询,连接查询,嵌套查询,以及集合查询等各种复杂不同的数据库查询,并将数据返回到客户机中显示,例如:SELECT语句。

数据控制语言(DCL):

用于管理数据库的语言,包含管理权限及数据更改,例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。

SQL语言通用规则:

1. 数据库对关键字的大小写不敏感,不包括数据,一般是关键字大写

2.SQL语言以分号结尾,只认分号(;),没有分号(;)数据库就会认为语句未结束

3.SQL语言可以分行写,以分号结尾

4.对空格敏感,每一个命令都空格分开

5.对数据可以使用单引号,也可以使用双引号,但必须配对使用

1.使用命令提示符登录mysql

(1)一般使用的是,默认就是3306和本机

mysql -u用户名 -p密码

例如:mysql -uroot -p123456

(2)如果端口号不是默认的,主机不是本机

格式:mysql -u用户名 -p密码 -h 主机地址 -P 端口号

例如:mysql -uroot -p123456 -h localhost -P 3307

例如:mysql -uroot -p123456 -h 192.168.2.83 -P 3307

2.查看数据库中的所有库名称

show databases;

3.选择库

use 库名称

例如:use mysql;

4.查看库的所有表

show TABLES;

5.mysql库中user表为用户表,包含 mysql 中所有的用户

user表字段解析:

Host 字段 -----主机地址,表示该用户能在什么地方进行登录

localhost ---本机

127.0.0.1 ---本机,指IPv4----TCP/IP

::1 -----本机,指IPv6

表示root只能本机登录,不能远程登录

192.168.2.92----指仅能通过此IP登录,任意IP

%-----指所有机器都能登录

User ----用户名

一个用户可以创建多个host

Password---密码

加密后的密文

为空的表示没密码

CREATE---创建库/用户

CREATE可以创建库,创建表,创建用户

(1)创建库

格式: CREATE DATABASE 库名;

mysql> CREATE DATABASE test_k;

(2)创建用户

1.创建默认用户

格式: CREATE USER username;

创建用户最简单的命令

mysql> CREATE user test_k;

表数据显示为:

host user password

% test_k

创建出来的用户,host为%,没有密码

2.创建用户,并指定密码

格式: CREATE USER username IDENTIFIED BY "PASSWORD";

mysql> CREATE user test_c identified by "123456";

表数据显示为:

host user password

% test_c *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

3.创建用户的同时指定host和密码

mysql> CREATE user 'test_t'’@'192.168.2.91‘' identified by '123456'‘;

4.创建一个用户test1,密码为123456,该用户可以在任意机器上登录

CREATE USER 'test1'@'%' identified by '123456';

==CREATE USER test1 identified by '123456';

CREATE TABLE----创建表

(1)创建表

公式: CREATE TABLE 表名( 字段名称1 数据类型 [属性][约束],

字段名称2 数据类型 [属性][约束],

字段名称3 数据类型 [属性][约束],

......

字段名称n 数据类型 [属性][约束],

);

(表名和字段名称是标识符,自己命名的)

mysql> CREATE TABLE student(id int PRIMARY KEY,

-> name varchar(10),

-> sex varchar(5),

-> age int(10),

-> addr varchar(30));

(2)查看表结构

DESC 表名;

(3)数据类型

原文链接:https://www.w3cschool.cn/mysql/mysql-data-types.html

数值类型:

SQL系列之DDL/DCL语言

文本类型:

SQL系列之DDL/DCL语言

日期类型:

SQL系列之DDL/DCL语言

(4)属性

(1).unsigned---- 无符号型

tinyint---值的范围(-128-127) 有符号位

无符号的范围(0-255)

CREATE TABLE t1(id tinyint(10));

CREATE TABLE t2(id tinyint(10) unsigned);

mysql> DESC t1;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id | tinyint(10) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

mysql> DESC t2;

+-------+----------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+----------------------+------+-----+---------+-------+

| id | tinyint(10) unsigned | YES | | NULL | |

+-------+----------------------+------+-----+---------+-------+

1.向t1表中插入数据129

insert into t1(id) values(129);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

2.向t2表中插入数据-11

insert into t2(id) values(-11);

ERROR 1264 (22003): Out of range value for column 'id' at row 1

(2) 自动补全--zerofill

字段设为zerofill时,自动为unsigned,且只能是数值类型

zerofill,unsigned只对数值类型的字段有效,且为整型

mysql> CREATE TABLE t1(id int zerofill);

mysql> DESC t1;

+-------+---------------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------------------------+------+-----+---------+-------+

| id | int(10) unsigned zerofill | YES | | NULL | |

+-------+---------------------------+------+-----+---------+-------+T

mysql> insert into t1(id) values(12);

mysql> select * from t1;

+------------+

| id |

+------------+

| 0000000012 |

+------------+

(3)自动递增---auto increment

字段为auto_increment时,字段必须为主键

mysql> CREATE TABLE t1(id int auto_increment PRIMARY KEY,name varchar(10));

mysql> DESC t1;

+-------+---------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

+-------+---------+------+-----+---------+----------------+

1.插入数据时,可以不插入相应数据(空值 ),但是该字段的值为自动递增,即是在最大值 上加1

INSERT INTO t1 (name) values("test");

2.数据如果是delete了,自动递增的计数器并不会清零,而会根据以前的最大值 再加1

3.插入数据时,id插入为null,0时,该字段还是自动递增,在最大值上加1

用法:流水号,学号等

1.不能空,唯一

auto_increment 必须为PRIMARY KEY(唯一+不能空)

2.计数器,值会自动递增

(4) null and not null--空和不为空

创建表时,null是默认为YES,表示该字段在插入数据时,可以为null(空)

eg:

INSERT INTO t3 VALUES (1,"TEST");

INSERT INTO t3(NUM) VALUES (2);

mysql> DESC t3;

+-------+------------------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------------------------+------+-----+---------+-------+

| num | tinyint(3) unsigned zerofill | YES | | NULL | |

| name | varchar(10) | YES | | NULL | |

+-------+------------------------------+------+-----+---------+-------

B.NOT NULL--不为空

CREATE TABLE t4 (num tinyint not null,

name varchar(10) not null,

age int(3));

mysql> DESC t4;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| num | tinyint(4) | NO | | NULL | |

| name | varchar(10) | NO | | NULL | |

| age | int(3) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

例如:不给num字段插入数据

INSERT INTO T4(name,age) values("test",24);

1364 - Field 'num' doesn't' have a default value

提示"num"没有默认值 ,在插入数据时必须输入数据

(5)DEFAULT-----默认值

CREATE TABLE t5(id int unsigned auto_increment PRIMARY KEY,

name varchar(10) not null default " ",

age int(3) not null default 0,

address varchar(30) );

(6)PRIMARY KEY----主键 :

1,唯一

2.不能为空

一个表中只有一个主键

(7)UNIQUE--- 唯一

数据不能重复

NOT NULL + UNIQUE = PRIMARY KEY

一个表中可以有多个UNIQUE

CREATE TABLE t6(id int PRIMARY KEY,

name varchar(10) unique,

age int(2) not null,

phone int(10) not null unique);

例如:向name字段插入重复的值

INSERT INTO t6(id,name,age,phone) values (2,"tester",24,"13410000000");

1062 - Duplicate entry 'tester' for key 'name'

以上只是一部分经常使用到的属性和约束,并不完整。

(7)IF NOT EXIST

CREATE TABLE [IF NOT EXISTS] 表名(字段名1 数据类型 [属性] [约束],

字段名2 数据类型 [属性] [约束])[表类型][字符集];

例如:库中已经存在t1表,再次插入t1表

mysql> CREATE TABLE t1(id int);

1050 - TABLE 't1' already exists

mysql> CREATE TABLE if not exists t1(id int);

Query OK, 0 rows affected

if not exists 在创建表时判断表是否存在,如果存在,执行通过不报错,但也不创建表,

如果表不存在,执行通过不报错,同时创建表

推荐:在创建时,最好加上判断

GRANT-权限

1.查看权限

(1)查看权限:

SHOW GRANTS;

(2)查看当前用户的权限

SELECT USER(); ---查看当前所在的用户

(3)查看其它用户的权限

SHOW GRANTS FOR 用户名;

例如:SHOW GRANTS FOR test; ---查看test用户的权限

(4)展示权限解析:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'

IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'

WITH GRANT OPTION

a.ALL PRIVILEGES----表示所有权限

b.ON*.* ---表示所有库.所有表 *表示所有

c. TO 'root'@'localhost'---表示哪个用户,这里指是root

d. IDENTIFIED BY PASSWORD

'*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' ---表示该用户访问的密码

e.WITH GRANT OPTION ---可以赋权

(5)USAGE---无权限

2.赋权

格式:

1.只赋权

GRANT 权限1,权限2,权限3,.....权限n ON *.* TO "username"@"host";

2.赋权并修改密码

GRANT 权限1,权限2,权限3,.....权限n ON *.* TO "username"@"host" IDENTIFIED BY "password";

1.给test_k赋select,insert,UPDATE权限

GRANT select,insert,UPDATE on *.* to 'test_k'@'%';

2.给test_k这个用户针对test库赋所有权限

GRANT ALL PRIVILEGES on test.* to 'test_k'@'%';

REVOKE-回收权限

公式: REVOKE 权限1,权限2,权限3,.....权限n ON *.* FROM "username"@"host";

REVOKE select on *.* from 'test_k'@'%';

revoke ---回收权限

on---表示范围

from ---表示从谁那里收权限

修改密码

(1)在命令提示窗口输入

在修改密码时,必须知道旧密码

mysqladmin -u用户名 -p旧密码 password 新密码 -P 端口号

(端口号不是3306,要加-P参数)

(2)修改user表中的用户密码(在mysql中修改的,所以必须事先进行登录)

UPDATE mysql.user SET password=password("123456")

WHERE user="test_t";

(3)SET password

1.修改当前用户的密码,要先登录,也要知道原密码

mysql> SET password = password("123456");

2.修改其它用户的密码

一般只有root用户才有权限,必须要知道root用户的密码

mysql> SET password for test_k = password("1234567");

mysql> SET password for test@192.168.2.92= password("987456");

修改密码,要么要知道该用户的密码,要么要知道root用户的密码

如果root用户的密码忘记了,只能改配置文件

DROP-删库,删表,删用户

DROP 命令慎用

(1)删除库

DROP DATABASE 库名;

(2)删除表

DROP TABLE [IF EXISTS] 表名;

删除多张表:

DROP TABLES 表1,表2…;

(3)删除用户

DROP USER 用户名;

1.host为%

mysql> DROP USER test_c;

2.host不为%,为IP,域名

DROP USER "username"@"host";

DROP USER 'test_t'@'192.168.2.83';

3.直接删除mysql.user表中的数据,也是删除用户

DELETE FROM mysql.user WHERE user="test";

ALTER -修改表结构

(1)修改表的名称

mysql> ALTER TABLE t6 RENAME AS student;

(2)修改表字段的数据类型

ALTER TABLE 表名 MODIFY 列名称 新的数据类型;

mysql> ALTER TABLE student modify phone varchar(11);

(3)修改表字段名称

ALTER TABLE 表名 CHANGE 旧列名称 新列名称 数据类型

mysql> ALTER TABLE student CHANGE name username varchar(10);

新列名称的数据类型,可以同时修改

(4)增加字段

ALTER TABLE 表名 ADD 列名称 数据类型 [完整属性] [约束] [first/after 列名称2];

1.如果不指定顺序,默认新增到最后

ALTER TABLE student ADD address varchar(30) not null default " chengdu";

2.将新增字段添加到最前面

ALTER TABLE student ADD s_id int auto_increment PRIMARY KEY FIRST;

3.将新增字段添加到username后面

ALTER TABLE student ADD sex varchar(5) not null after username;

(5)删除字段

ALTER TABLE 表名 DROP 列名称;

在实际工作中一般表中有大量的数据,在修改表结构会导致数据的丢失或者串行,所以一般不建议使用ALTER命令

相关文章
我们该如何设计数据库
数据库设计经验谈
数据库设计过程
数据库编程总结
相关文档
数据库性能调优技巧
数据库性能调整
数据库性能优化讲座
数据库系统性能调优系列
相关课程
高性能数据库设计与优化
高级数据库架构师
数据仓库和数据挖掘技术
Hadoop原理、部署与性能调优

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

复杂网络理论及其应用

复杂网络理论及其应用

汪小帆、李翔、陈关荣 / 清华大学出版社 / 2006 / 45.00元

国内首部复杂网络专著 【图书目录】 第1章 引论 1.1 引言 1.2 复杂网络研究简史 1.3 基本概念 1.4 本书内容简介 参考文献 第2章 网络拓扑基本模型及其性质 2.1 引言 2.2 规则网络 2.3 随机图 2.4 小世界网络模型 2.5 无标度网络模型 ......一起来看看 《复杂网络理论及其应用》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器