目录
前言
一、数据库基本操作命令
1、查看数据库的信息
2、查看数据库中包含的表
3、查看表的结构(字段)
二、SQL语句概述
1、 SQL语言
2、SQL分类
三、SQL语句基本操作
1、DDL
1.1 创建数据库
1.2 创建数据表
1.3 删除指定的数据表
1.4 删除指定的数据库
2、DML
2.1 插入新数据(INSERT)
2.2 更新原有数据(UPDATE)
2.3 删除不需要的数据(DELETE)
3、DQL
4、DCL
4.1 设置用户权限(用户不存在时,则新建用户)
4.2 查看用户的权限
4.3 撤销用户的权限
四、修改表名和表结构——alter
1、修改表名
2、扩展表结构(增加字段)
3、修改字段(列)名,添加唯一键
4、删除字段、主键
总结
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,-目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
mysql> show databases; #大小写不区分,分号“;”表示结束
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql>
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
.............省略部分内容
USE 数据库名;
DESCRIBE [数据库名.]表名;
可缩写成:DESC 表名;
这里执行就像我们在Linux中使用绝对路径和相对路径一样,当你在所在表的库中时,可省略前面的数据库名(相对路径)。
当你需要对其他库中的表进行操作时,就需要加上库名(绝对路径)进行操作。
mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
.............省略部分内容
数据表的结构:
第一字段 Field每条(行)代表的是字段
第二字段 Type代表是此条字段可以写什么样的数据类型
字段中定义了各个类型及是否为默认
第三字段 Null代表此条字段是否可以为空
第四字段 Key 主键 PRI(primary)代表是否为主键 ,主键可以有组合组件,多个字段组成一个组件
第五字段 Default 默认字段,当设置没有输入内容时,生成的表显示的就是默认字段,可以设置默认字段为一个固定值,例如设置默认字段为:nj,则之后创建如果没有设置此字段,表中此项默认为:nj。
第六字段 Extra 扩展 扩展可以显示标识符列:(引申概念:种子、增量,例如种子为1 增量为1,则生成一条记录时,id为1 第二个记录为2)不可人为修改
是Structured Query Language的缩写,即结构化查询语言
是关系型数据库的标准语言
用于维护管理数据库,如数据查询、数据更新、访问控制、对象管理等功能
DML | 数据操纵语言,用于对表中的数据进行管理 |
DQL | 数据查询语言,用于从数据表中查找符合条件的数据记录 |
DDL | 数据定义语言,用于创建数据库对象,如库、表、索引等 |
DCL | 数据控制语言,用于设置或者更改数据库用户或角色权限 |
格式:CREATE DATABASE 数据库名;
mysql> create database abc; ##创建abc库
Query OK, 1 row affected (0.01 sec)
mysql> show databases; ##查看库列表
+--------------------+
| Database |
+--------------------+
| information_schema |
| abc | ##abc库已创建
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql>
格式:CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
mysql> use abc; ##进入abc库
Database changed
mysql> create table abc01( ##创建abc01表
-> id int not null, ##定义表中字段
-> name char(10) not null,
-> address varchar(50) default 'BJ',
-> primary key (id));
Query OK, 0 rows affected (0.43 sec)
mysql> describe abc01; ###查看数据表结构
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(10) | NO | | NULL | |
| address | varchar(50) | YES | | BJ | |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql>
格式:
use 数据库名;
drop table 表名;
或
drop table [数据库名.]表名;
mysql> drop table abc.abc01; ##删除abc01数据表
Query OK, 0 rows affected (0.04 sec)
mysql> use abc; ##进入abc库
Database changed
mysql> show tables; ##查看数据表列表
Empty set (0.00 sec)
####没有任何数据表,abc01数据表已被删除
mysql>
格式: DROP DATABASE 数据库名;
mysql> drop database abc; ##删除abc数据库
Query OK, 0 rows affected (0.01 sec) ##ok,删除成功
格式:insert into 表名(字段1,字段2[,...]) values(字段1的值,字段2的值,...);
mysql> create database abcd; ##创建abcd库
Query OK, 1 row affected (0.00 sec)
mysql> use abcd; ##进入abcd库
Database changed
mysql> create table abcd01( ##创建abcd01表
-> id int(4) not null,
-> name char(10) not null,
-> address varchar(50) default 'NJ',
-> primary key (id));
Query OK, 0 rows affected (0.04 sec)
mysql> desc abcd01; ##显示abcd01表的结构
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(4) | NO | PRI | NULL | |
| name | char(10) | NO | | NULL | |
| address | varchar(50) | YES | | NJ | |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> insert into abcd01(id,name)values(1,'zhangsan');
##插入数据id=1,姓名zhangsan
mysql> select * from abcd01; ##查看表中数据内容
+----+----------+---------+
| id | name | address | ##id已经为1,姓名为zhangsan
+----+----------+---------+
| 1 | zhangsan | NJ |
+----+----------+---------+
1 row in set (0.00 sec)
mysql>
格式:UPDATE 表名 SET 字段名1=值1 WHERE条件表达式;
mysql> update abcd01 set name='wangwu' where id =1;
##修改id为1的字段姓名为wangwu
mysql> select * from abcd01; ##显示表中数据内容
+----+--------+---------+
| id | name | address |
+----+--------+---------+ ##姓名已变为wangwu
| 1 | wangwu | NJ |
+----+--------+---------+
1 row in set (0.00 sec)
格式:DELETE FROM 表名 WHERE 条件表达式;
mysql> delete from abcd01 where id =1; ##删除id为1的字段的数据
Query OK, 1 row affected (0.01 sec)
mysql> select * from abcd01; ##显示表中数据内容
Empty set (0.00 sec) ##变为空
格式:selext 字段名1,字段名2… from 表名;
查询时可不指定条件
mysql> select * from auth.users;
+----+----------+
| id | name |
+----+----------+
| 2 | jiaoshou |
+----+----------+
1 row in set (0.01 sec)
查询时指定条件
mysql> select name from auth.users where name='jiaoshou';
+----------+
| name |
+----------+
| jiaoshou |
+----------+
1 row in set (0.01 sec)
格式:grant 权限列表 on 数据库名.表名 to 用户名@来源地址 [identified by ‘密码’];
grant all privileges on *.* to 'root'@'192.168.181.%' identified by 'abc123' with grant option; #允许192.168.181.0网段使用root账号复制所有数据库数据,登录密码为‘abc123’
mysql> grant all privileges on *.* to 'root'@'192.168.181.%' identified by 'abc123' with grant option;
Query OK, 0 rows affected, 1 warning (0.01 sec)
#允许192.168.181.0网段使用root账号复制所有数据库数据,登录密码为‘abc123’
格式:show grants for 用户名@来源地址;
mysql> show grants for 'root'@'192.168.181.%';
+-------------------------------------------------------------------------+
| Grants for [email protected].% |
+-------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.181.%' WITH GRANT OPTION |
+-------------------------------------------------------------------------+
1 row in set (0.00 sec)
格式:remove 权限列表 on 数据库名.表名 from 用户名@来源地址;
mysql> revoke all privileges on *.* from 'root'@'192.168.181.%';
Query OK, 0 rows affected (0.00 sec)
ALTER TABLE 旧表名 RENAME 新表名;
例:alter table CLASS1 rename CLASS2;
show tables;
select * from CLASS2;
ALTER TABLE 表名 ADD address varchar(50) default '地址不详';
#default ‘地址不详’:表示此字段设置默认值 地址不详;可与 NOT NULL 配合使用
例:alter table class2 add address varchar(50) default '地址不详';
alter table 表名 change 旧列名 新列名 数据类型 [unique key];
#change 可修改字段名、数据类型、约束等所有项
唯一键:唯一,但可以为空(空值只能出现一次)
#每张表往往有多个字段具有唯一性,但是只能指定一个主键,所以唯一键就是用来解决表中多个字段需要具有唯一性的问题
主键包含唯一键的部分属性
唯一键不能完全作为主键
例:alter table class2 change name student_name varchar(20) unique key;
select * from class2;
insert into class2 (id,student_name,sex) values (1,'wangdachu','女');
select * from class2;
insert into class2 (id,student_name,sex) values (4,'wangdachu','女');
alter table 表名 drop 字段名;
例:alter table class2 drop address;
主要讲述了数据库管理,之后会介绍数据库中索引、事务、视图、存储过程和存储引擎的理论和使用方法。