Mysql数据库服务
使用MySQL数据库
访问MySQL数据库
1.登陆MySQL服务器
[root@localhost ~]# mysql -uroot -p
Enter password: //输入密码
mysql>
2.执行MySQL操作语句
进入MySQL数据库后,可以输入各种操作语句对数据库进行管理。每条操作语句用分号“;”表示结束。输入时不区分大小写。
查看数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
5 rows in set (0.01 sec)
mysql>
3.退出数据库
执行“exit”或“quit”命令表示退出MySQL。
mysql> exit
Bye
[root@localhost ~]#
mysql> quit
Bye
[root@localhost ~]#
查看数据库结构
1.查看数据库信息
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql>
//默认建立了洗个库:
information_schema
mysql :记录了用户认证的表
performance_schema
sys
2.查看数据库中的表信息
mysql> use mysql;
Database changed
mysql> show tables;
MySQL数据库文件存放在/usr/local/mysql/data/下。每个数据库对于一个子目录。
3.查看表结构
mysql> use mysql; //进入mysql库
mysql> desc user; //查看表结构
4.常用的数据类型:
-
int:整型。 用于定义格数类型的数据
-
float:单精度浮点4字节32位。 准确表示到小数点后六位
-
double:双精度浮点8字节64位
-
char:固定长度的宁符类型。 用于定义字符类型数据。
-
varchar:可变长度的子符类型
-
text:文本
-
image:图片
-
decimal(5,2):5个有效长度数字,小数点后面有2位。 指定长度数组。截取后2位,四舍五入
-
char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错
注:截取:会进行四舍五入
截断:直接取固定的长度。
数据库管理操作
SQL语句概述
SQL语言
- Structured Query Language的缩写,即结构化查询语言
- 关系型数据库的标准语言
- 用于维护管理数据库
- 包括数据查询、数据更新、访问控制、对象管理等功能
SQL分类
-
DDL:数据定义语言:
可用于创建数据库对象,如库,表,索引等。如:create、alter、drop -
DML:数据操纵语言
用来查询、插入、删除和修改数据库中的数据。如:select、insert、update、delete -
DQL:数据查询语言
-
DCL:数据控制语言
用来控制数据库组件的存取许可,存取权限等。如:commit、rollback、grant、revoke
创建及删除库和表
使用DDL语句新建库、表
1.创建数据库
mysql> create database class1;
Query OK, 1 row affected (0.00 sec)
2.创建数据表
mysql> use class1;
mysql> create table class1 (id int NOT NULL,name char(10),age int(3),score float);
Query OK, 0 rows affected (0.01 sec)
mysql> desc class1; //查看表结构
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | char(10) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
| score | float | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
4 rows in set (0.01 sec)
Fieid:字段名称
Type:数据类型
Null :是否允许为空
Key :主键,主键有唯一性,不可为空,不可设置重复冲突
Default :默认值
Extra:扩展属性,例如:标志符列(标识了种子,增量/步长)
创建主键
创建ID为主键的表。
mysql> create table class (id int(3) ,name varchar(20),age int(3),primary key(id));
//指定id为主键,主键只能有一个,且不能为空。
Query OK, 0 rows affected (0.02 sec)
mysql> desc class;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(3) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
3.删除数据表
mysql> drop table class; //删除class表
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+------------------+
| Tables_in_class1 |
+------------------+
| class1 |
+------------------+
1 row in set (0.00 sec)
4.删除一个数据库
mysql> drop database class1; //删除class1库
Query OK, 1 row affected (0.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
5 rows in set (0.00 sec)
DML管理表中数据记录
1.查询数据记录
select:查询
格式: SELECT 字段1【*:表示所有】 from 表名;
mysql> select * from user;
+----------+--------+
| id | pass |
+----------+--------+
| zhangsan | abc123 |
| wangwu | 112233 |
+----------+--------+
2 rows in set (0.00 sec)
mysql> select id from user;
+----------+
| id |
+----------+
| zhangsan |
| wangwu |
+----------+
2 rows in set (0.00 sec)
Select * :搜索所有。
Select id,name from class1; :从class1中查询id name
Select id,name from class1 where score>25; :查询class1中score大于25的id和name
2.插入数据记录
insert:插入新数据
格式:INSERT INTO 表名 VALUES (字段1的值,字段2的值…);
在school库中的class1中插入数据:
mysql> insert into class1 values(1,"zhangsan",22,89);
Query OK, 1 row affected (0.00 sec)
加密方式:insert into class1 (1,’zhangsan’,passwd”123456”)
3.更新原有数据
update:更新原有数据
格式: UPDATE 表名 SET 字段名1=字段值1,[WHERE 条件表达式];
mysql> select * from user; //查看user表所有数据
+----------+--------+
| id | pass |
+----------+--------+
| zhangsan | abc123 |
| lisi | 123456 |
| wangwu | 112233 |
+----------+--------+
3 rows in set (0.00 sec)
//将lisi改为liusi
mysql> update user set id='liusi' where pass='123456';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from user;
+----------+--------+
| id | pass |
+----------+--------+
| zhangsan | abc123 |
| liusi | 123456 |
| wangwu | 112233 |
+----------+--------+
3 rows in set (0.00 sec)
4.删除数据
delete:删除
格式: DELETE from 表名 WHERE 条件表达式;
删除liusi记录
mysql> delete from user where id='liusi';
Query OK, 1 row affected (0.00 sec)
DCL数据控制语言
1.alter 修改表名和表结构
1.修改表名
格式: ALTER TABLE 旧表名 RENAME 新表名;
mysql> alter table class1 rename banji1;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| banji1 |
| user |
+------------------+
2 rows in set (0.00 sec)
2.扩展表结构
格式: ALTER TABLE 表名 ADD 字段1 格式;
mysql> alter table user add VIP varchar(10) NOT NULL default 'NO';
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | varchar(20) | NO | | NULL | |
| pass | varchar(30) | YES | | NULL | |
| VIP | varchar(10) | NO | | NO | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
3.修改表结构
将id设为主键,VIP设为唯一键
mysql> desc qq;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| pass | varchar(20) | YES | | NULL | |
| VIP | varchar(10) | YES | | NO | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> alter table qq change id id int(10) primary key; //将id设为主键
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table qq change VIP VIP varchar(10) unique key; //将VIP设为唯一键
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc qq;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(10) | NO | PRI | NULL | |
| pass | varchar(20) | YES | | NULL | |
| VIP | varchar(10) | YES | UNI | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
添加字段约束
格式:alter table 表名 add unique(字段)
mysql> desc users;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| shenfen | varchar(50) | YES | | NULL | |
| address | varchar(50) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
mysql> alter table users add unique;
mysql> desc users;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | UNI | NULL | |
| shenfen | varchar(50) | YES | | NULL | |
| address | varchar(50) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
删除字段的约束
格式:alter table 表名 drop index 字段
mysql> desc users;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | UNI | NULL | |
| shenfen | varchar(50) | YES | | NULL | |
| address | varchar(50) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
mysql> alter table users drop index name;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc users;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| shenfen | varchar(50) | YES | | NULL | |
| address | varchar(50) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
4.删除字段
格式:alter table 表名 drop 字段名;
mysql> desc users;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | UNI | NULL | |
| shenfen | varchar(50) | YES | | NULL | |
| address | varchar(50) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table users drop shenfen;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc users;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | UNI | NULL | |
| address | varchar(50) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
5.扩展
指定主键的第二种方式
mysql> create table if not exists users (id int(11) zerofill primary key auto_increment,name varchar(20) unique key,address varchar(50));
//if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
//int (11) zerofill:表示若数值不满4位数,则前面用"0"填充,例0001
//auto increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
数据表高级操作
备份表
复制表结构
格式:create table xxx1 like xxx;将xxx表的结构复制到xxx1上
复制内容
insert into xxx1 select * from xxx; 将xxx表内容复制到xxx1
克隆表 :将数据表的数据记录生成新的表中
格式 create table xxx1 (select * from xxx); :将xxx数据克隆到xxx1中。不带xxx的格式(约束…)
清空表,不删除表结构
delete from 表名;
清空表后,返回的结果内有删除的记录条目
mysql> delete from user1;
Query OK, 3 rows affected (0.00 sec)
mysql> select * from user1;
Empty set (0.00 sec)
truncate table 表名;
清空表后,没有返回被删除的记录条目。
mysql> truncate table user1;
Query OK, 0 rows affected (0.01 sec)