目录
一、数据库基本操作
1.查看数据库信息
SHOW DATABASES
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| njzb | 大部分SQL操作命令
| performance_schema | 必须以; 结束
| sys |
+--------------------+
5 rows in set (0.00 sec
1.1查看数据库中的表信息
USE 数据库名
SHOW TABLES
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
ysql> show tables
-> ;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
1.2 显示数据表的结构
DESCRIBE [数据库名.]表名
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
注:也可以使用“desc user;”
常见的数据类型
常用的数据类型:
int:整型 用于定义整数类型的数据
float:单精度浮点4字节32位 准确表示到小数点后六位
double:双精度浮点8字节64位
char:固定长度的字符类型 用于定义字符类型数据。 20字节 4
varchar:可变长度的字符类型 20 4
text:文本
image:图片
decimal(5,2):5个有效长度数字,小数点后面有2位 指定长度数组
2.数据库管理操作
2.1 SQL语言
Structured Query Language的缩写,即结构化查询语言关系型数据库的标准语言用于维护管理数据库、
包括数据查询、数据更新、访问控制、对象管理等功能
SQL分类
DDL:数据定义语言
DML:数据操纵语言
DQL:数据查询语言
DCL:数据控制语言
2.2 创建数据库和表
- DDL语句可用于创建数据库对象,如库、表、索引等
- 使用DDL语句新建库、表
- 创建数据库:CREATE DATABASE 数据库名
- 创建数据表:CREATE TEBLE 表名 (字段定义......)
mysql> create database njzb;
Query Ok,1 row affected (0.0l sec)
创建名为njzb的数据库
由上可知show databases可以查看数据库的表信息
mysql>create table ky35 (id int not null,name char(15) not null,score decimal(4,2),passwd char(45) default'',primary key (id));
由上又可以用到desc ky35来显示表的结构
删除表名
DROP TABLE [数据库名.】表名
再次建立名为ky37的表名
如果想将ky37删除
当然也有其他删除方法
删除数据库也是同样道理:
DROP DATAVASE 数据库名
创建名为ufc的数据库
依旧是用drop 删除
3.管理表中的数据
- DML语句用于对表中的数据进行管理
- 包括的操作
- INSERT:插入新数据
- UPDATE:更新原有数据
- DELETE:删除不需要的数据
3.1 向数据表中插入新的数据记录
INSERT INTO 表名(字段1,字段2......)
VALUES(字段1的值,字段2的值,.......)
mysql> INSERT INTO ky35 (id,name,score,passwd) values(1,'zhaoyan',80.5,PASSWORD('201314'));
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> INSERT INTO ky35 (id,name,score,passwd) values(2,'xuzhou',82.5,303475);
Query OK, 1 row affected (0.00 sec)
如果不用PASSWORD(' ')密码不会隐藏
3.2 修改、更新数据表中的数据及记录
UPDATE 表名 SET 字段名1=值1[字段名2=值2] WHERE 条件表达式
mysql> update auth.users set user_passwd=PASSWORD(") where
user name='lisi':
Query OK, 1 row affected (0.00 sec)
Rows matched:1 Changed:1 Warnings:0
mysql> update mysql.user set authentication string=PASSWORD('123457')
where user='root';
Query OK, 4 rows affected (0.00 sec)
Rows matched:4 Changed:4 Warnings: 0
mysqI> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
3.3 在数据表中删除指定的数据记录
DELETE FROM 表名 WHERE 条件表达式
mysql> delete from auth.users where user name='lisi'
Query OK, 1 row affected (0.00 sec)
不带where条件的语句表示删除表中所有记录
mysql> delete from auth.users;
Query OK, 1 row affected (0.00 sec)
由上可知drop是删除,但它连同表名和数据一块删除
至此我们用delete
这个时候我们再去创建也是可以的
4.查找符合条件的数据记录
- DQL是数据查询语句,只有SELECT
- 用于从数据表中查找符合条件的数据记录
- 查询时可不指定条件
SELECT 字段名1,字段名2.....FROM表名
查询时指定条件
SELECT 字段名1,字段名2.....FROM表名 WHERE 条件表达式
注意条件就行
拓展:limit :可以指定行数
limit 2 可以查到第二行
二、数据表高级操作
1.清空表
- DELETE FROM tablename
- TRUNCATE TABLE tablename
mysql>truncate table tmp;
方法一:
delete from yyy3;
#DELETE清空表后,返回的结果内有删除的记录条目;
DELETE 工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除
所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。
方法二:
truncate table test01;
#TRUNCATE清空表后,没有返回被删除的条目: TRUNCATE 工作时是将表结构按原样重新建立,
因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE 清空表内数据后,
ID会从1开始重新记录
2.临时表
- 临时建立的表,用于保存一些临时数据,不会长期存在
mysqI> CREATE TEMPORARY TABLE `mytmp'(
'id`int(10) NOT NULL AUTO INCREMENT.
'NAME`varchar(32)CHARACTER SET utf8 COLLATE utf8 _bin
NOT NULL
'level` int(10) NOT NULL
PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK,0 rows affected(0.00 sec)
3.克隆表
LIKE方法
mysql> create table test like mytmp;
mysql> insert into test select * from mytmp;
SHOW CREATE TABLE方法
mysql> show create table mytmp\G
mysql> create table test(.....);
mysql> insert into test select * from mytmp;
方法1:
方法2:
虽然字段属性都有 但是主件没有
4.alter
4.1修改表名
ALTER TABLE 旧表名 RENAME 新表名
列子:
ALTER TABLE zzz RENAME yyy;
ALTER TABLE yyy RENAME xxx;
当然里边数据也都在
4.2拓展自带名
拓展表结构:
ALTER TABLE 表名 ADD address varchar(50) default '地址不详';
4.3修改拓展自带名
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];
三、数据库用户管理
1.创建
'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
若使用加密密码,需要先使用SELECT PASSWORD('密码');获取密文,再在语句中添PASSWORD '密文';
若省略“IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)
SELECT PASSWORD('abc123'); 修改当前密码
CREATE USER 'user2'@'localhost' IDENTIFIED BY PASSWORD '*
删除用户
DROP USER 'xuzhou'@'localhost' ;
删除后查看名为xuzhou的用户没了
3.如果密码忘记了 可以在服务端修改
首先退出mysql
(也可以快捷键ctrl+d)
在服务端添加skip-grant-tables并重启
然后输入mysql -uroot,可以直接进来
因为我们是跳进来的,需要刷新一下!!!
不刷新会报错!!
接着就可以设置密码了
四、数据库用户授权
grant 提权
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
1.创建普通用户
2.刷新并退出
3.登录进入数据库
4.可以查看数据库
5.也能查看表
6.但不能删除表,因为权限不够
使用Navicat Premium链接数据库
刚刚创建的xuzhou因为没有权限所有外部链接不上
设置外部ip为192.168.10.%的外部可链接
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;
记得重启!!