数据库和表的简单操作

打印 上一主题 下一主题

主题 907|帖子 907|积分 2721

创建数据库

  1. CREATE DATABASE [IF NOT EXISTS] db_name [create_specification  ...];
  2. create_specification:
  3. [DEFAULT] CHARACTER SET charset_name
  4. [DEFAULT] COLLATE collation_name
复制代码
分析:


  • 大写的是关键字
  • []是可选项
  • character set:指定数据库采用的字符集
  • collate:指定数据库字符集的校验规则
创建数据库本质就是在/var/lib/mysql创建一个目录
创建数据库的时候,有两个编码集:

  • 数据库编码集—数据库未来存储数据
  • 数据库校验集—支持数据库举行字段比力使用的编码,本质也是一种读取数据库中数据所采用的编码格式
数据库无论对数据做任何操作,都必须包管操作和编码必须是编码一致的。
创建数据库案例

当我们创建数据库没有指定字符集和校验规则时,体系使用默认字符集:utf8,校验规则是:utf8_ general_ ci


  • 创建一个使用utf8字符集的 db1 数据库
    1. create database if not exists db1 charset=utf8;
    复制代码



  • 创建一个使用utf8字符集,并带校验规则的 db2 数据库
    1. create database if not exists db2 charset=utf8 collate utf8_general_ci;
    复制代码

字符集和校验规则

查看体系默认字符集以及校验规则

  1. show variables like 'character_set_database';
  2. show variables like 'collation_database';
复制代码

查看数据库支持的字符集

  1. show charset;
复制代码
字符集主要是控制用什么语言,比如utf8就可以使用中文

查看数据库支持的字符集校验规则

  1. show collation;
复制代码
校验规则对数据库的影响

例如对于巨细写的区分
创建一个校验规则使用utf8_general_ci的数据库[不区分巨细写]
  1. create database test1 collate utf8_general_ci;
  2. use test1;
  3. create table person(name varchar(20));
  4. insert into person values('a');
  5. insert into person values('A');
  6. insert into person values('b');
  7. insert into person values('B');
复制代码

创建一个数据库,校验规则使用utf8_ bin[区分巨细写]
  1. create database test2 collate utf8_bin;
  2. use test;
  3. create table person(name varchar(20));
  4. insert into person values('a');
  5. insert into person values('A');
  6. insert into person values('b');
  7. insert into person values('B');
复制代码

举行查询和排序的效果:
不区分巨细写的查询以及排序的效果
  1. mysql> select * from person where name='a';
  2. +------+
  3. | name |
  4. +------+
  5. | a    |
  6. | A    |
  7. +------+
  8. 2 rows in set (0.00 sec)
  9. mysql> select * from person order by name;
  10. +------+
  11. | name |
  12. +------+
  13. | a    |
  14. | A    |
  15. | b    |
  16. | B    |
  17. +------+
  18. 4 rows in set (0.00 sec)
复制代码
区分巨细写的查询以及排序的效果
  1. mysql> select * from person where name='a';
  2. +------+
  3. | name |
  4. +------+
  5. | a    |
  6. +------+
  7. 1 row in set (0.00 sec)
  8. mysql> select * from person order by name;
  9. +------+
  10. | name |
  11. +------+
  12. | A    |
  13. | B    |
  14. | a    |
  15. | b    |
  16. +------+
  17. 4 rows in set (0.00 sec)
复制代码
操纵数据库

查看数据库

  1. show databases;
复制代码
显示创建语句

  1. show create database 数据库名;
复制代码

分析:


  • MySQL建议我们关键字使用大写,但是不是必须的。
  • 数据库名字的反引号` `是为了防止使用的数据库名刚好是关键字。
  • /*!40100 default.... */这个不是注释,体现当前mysql版本大于4.01版本,就实行这句话。
修改数据库

  1. ALTER DATABASE db_name [alter_spacification [,alter_spacification]...];
  2. alter_spacification:
  3. [DEFAULT] CHARACTER SET charset_name
  4. [DEFAULT] COLLATE collation_name
复制代码
对数据库的修改主要指的是修改数据库的字符集、校验规则
示例:将test2数据库字符集改成gbk

数据库删除

  1. drop database [if exists] db_name;
复制代码
实行删除之后的效果:


  • 数据库内部看不到对应的数据库
  • 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
备份和规复

备份

  1. mysqldump -P3306 -u root -p -B 数据库名 > 数据库备份存储的文件路径
复制代码
示例:将test1库备份到文件
  1. mysqldump -uroot -p -B test1 >./mytest.sql
复制代码

这时,打开mytest.sql文件里的内容,其实把我们整个创建数据库、建表、导入数据的语句到装载到这个文件中

还原

  1. mysql> source /home/liuxu/test/mytest.sql;
复制代码
注意事项

如果备份的不是整个数据库,而是其中的一张表呢?
  1. mysqldump -uroot -p 数据库名 表名1 表名2 >./mytest.sql
复制代码
同时备份多个数据库
  1. mysqldump -uroot -p  -B 数据库名1 数据库名2 >./mytest.sql
复制代码
  如果备份一个数据库时,没有带上-B参数,在规复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。
  以此来做到对数据库重命名
  查看连接情况

  1. show processlist;
复制代码

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是自己正常登岸的,很有可能你的数据库是被人入侵了。
创建表

语法:
  1. create table table_name(
  2.         field1 datatype,
  3.         field2 datatype,
  4.     field3 datatype
  5.         )charset=字符集 collate=校验规则 engine 存储引擎;
复制代码
分析:


  • field 体现列明
  • datatype 体现列的范例
  • character set 字符集,如果没有指定字符集,则以地点数据库的字符集为准
  • collate 校验规则,如果没有指定校验规则,则以地点数据库的校验规则为准
创建表案例

  1. mysql> create table user(
  2.     -> id int,
  3.     -> name varchar(20) comment '用户名',
  4.     -> password char(32) comment '密码是32位的md5值',
  5.     -> birthday date comment '生日'
  6.     -> )charset=utf8 engine MyISAM;
  7. Query OK, 0 rows affected (0.02 sec)
复制代码
分析:


  • comment 对该列举行笔墨分析
  • 差别的存储引擎,创建表的文件不一样
    user表存储引擎是MyISAM,在数据库中有三个差别的文件,分别是:

    • user.frm:表结构
    • user.MYD:表数据
    • user.MYI:表索引


查看表结构

  1. desc 表名;
复制代码

修改表

在项目实际开发中,要经常修改某个表的结构,比如字段名字、字段巨细、字段范例、表的字符集范例、表的存储引擎等等,大概是添加字段、删除字段等。这时我们就需要修改表。
案例:


  • 在user表中添加两条纪录
    1. mysql> insert into user values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-03');
    复制代码
  • 在user表中添加一个字段,用于保存图片路径
    1. mysql> alter table user add assets varchar(100) comment '图片路径' after birthday;
    复制代码
    1. mysql> desc user;
    2. +----------+--------------+------+-----+---------+-------+
    3. | Field    | Type         | Null | Key | Default | Extra |
    4. +----------+--------------+------+-----+---------+-------+
    5. | id       | int(11)      | YES  |     | NULL    |       |
    6. | name     | varchar(20)  | YES  |     | NULL    |       |
    7. | password | char(32)     | YES  |     | NULL    |       |
    8. | birthday | date         | YES  |     | NULL    |       |
    9. | assets   | varchar(100) | YES  |     | NULL    |       |
    10. +----------+--------------+------+-----+---------+-------+
    11. 5 rows in set (0.00 sec)
    复制代码
    插入新字段后,对原来表中的数据是没有影响的:
    1. mysql> select * from user;
    2. +------+------+----------+------------+--------+
    3. | id   | name | password | birthday   | assets |
    4. +------+------+----------+------------+--------+
    5. |    1 | a    | b        | 1982-01-04 | NULL   |
    6. |    2 | b    | c        | 1984-01-03 | NULL   |
    7. +------+------+----------+------------+--------+
    8. 2 rows in set (0.00 sec)
    复制代码
  • 修改name,将其长度改成60
    1. mysql> alter table user modify name varchar(60);
    复制代码
    1. mysql> desc user;
    2. +----------+--------------+------+-----+---------+-------+
    3. | Field    | Type         | Null | Key | Default | Extra |
    4. +----------+--------------+------+-----+---------+-------+
    5. | id       | int(11)      | YES  |     | NULL    |       |
    6. | name     | varchar(60)  | YES  |     | NULL    |       |
    7. | password | char(32)     | YES  |     | NULL    |       |
    8. | birthday | date         | YES  |     | NULL    |       |
    9. | assets   | varchar(100) | YES  |     | NULL    |       |
    10. +----------+--------------+------+-----+---------+-------+
    11. 5 rows in set (0.00 sec)
    复制代码
  • 删除password列
    删除字段一定要警惕,删除字段及其对应的列数据都没了
    1. mysql> alter table user drop password;
    复制代码
    1. mysql> desc user;
    2. +----------+--------------+------+-----+---------+-------+
    3. | Field    | Type         | Null | Key | Default | Extra |
    4. +----------+--------------+------+-----+---------+-------+
    5. | id       | int(11)      | YES  |     | NULL    |       |
    6. | name     | varchar(60)  | YES  |     | NULL    |       |
    7. | birthday | date         | YES  |     | NULL    |       |
    8. | assets   | varchar(100) | YES  |     | NULL    |       |
    9. +----------+--------------+------+-----+---------+-------+
    10. 4 rows in set (0.00 sec)
    复制代码
  • 修改表名位employee
    to可以省掉
    1. mysql> alter table user rename to employee;
    复制代码
    1. mysql> select * from employee;
    2. +------+------+------------+--------+
    3. | id   | name | birthday   | assets |
    4. +------+------+------------+--------+
    5. |    1 | a    | 1982-01-04 | NULL   |
    6. |    2 | b    | 1984-01-03 | NULL   |
    7. +------+------+------------+--------+
    8. 2 rows in set (0.00 sec)
    复制代码
  • 将name列修改为xingming
    1. mysql> alter table employee change name xingming varchar(60);--新字段需要完整定义
    复制代码
    1. mysql> desc employee;
    2. +----------+--------------+------+-----+---------+-------+
    3. | Field    | Type         | Null | Key | Default | Extra |
    4. +----------+--------------+------+-----+---------+-------+
    5. | id       | int(11)      | YES  |     | NULL    |       |
    6. | xingming | varchar(60)  | YES  |     | NULL    |       |
    7. | birthday | date         | YES  |     | NULL    |       |
    8. | assets   | varchar(100) | YES  |     | NULL    |       |
    9. +----------+--------------+------+-----+---------+-------+
    10. 4 rows in set (0.00 sec)
    复制代码
删除表

语法:
  1. drop table [if exists] table_name;
复制代码
示例:
  1. mysql> drop table if exists employee;
复制代码
  1. mysql> show tables;+-----------------+| Tables_in_test1 |+-----------------+| employee        || person          |+-----------------+2 rows in set (0.00 sec)mysql> drop table if exists employee;
  2. Query OK, 0 rows affected (0.01 sec)mysql> show tables;+-----------------+| Tables_in_test1 |+-----------------+| person          |+-----------------+1 row in set (0.00 sec)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表