数据库真好玩

-- 创建数据库
create database mydatabases;

字符集:charset
校对集:collate

create database mydatabases2 charset gbk;
--校对集跟随字符集


--显示数据库
show databases;

--显示部分数据库
show databases like ‘匹配模式’;
show databases like _A; 当前位置的单个字符
show databases like _ad%; 指定位置的多个字符

--显示数据库创建语句
show create database 数据库名字

mysql> show create database mydatabases;
+-------------+-----------------------------------------------------------------
----+
| Database    | Create Database
    |
+-------------+-----------------------------------------------------------------
----+
| mydatabases | CREATE DATABASE `mydatabases` /*!40100 DEFAULT CHARACTER SET gbk
 */ |
+-------------+-----------------------------------------------------------------
----+
1 row in set (0.00 sec)

--选择数据库
use mydatabases;

mysql> use mydatabases;
Database changed

--修改数据库
alter database 数据库名字 charset=字符集;

mysql> alter database mydatabases charset gbk;
Query OK, 1 row affected (0.00 sec)

--删除数据库
drop database 数据库名字;
--谨慎操作
mysql> drop database mydatabases;
Query OK, 0 rows affected (0.01 sec)

--创建数据表
create table 表名(字段名 字段类型[字段属性],字段名 字段类型[字段属性]...);
create table class(
    name varchar(10)
);

--要先链接数据库,在库中创建表
create table 数据库名称.class(
    name varchar(10)
);
mysql> create table mydatabases2.class1(
    -> name varchar(10)
    -> );
Query OK, 0 rows affected (0.01 sec)

--第二种方式,先进入在创建
mysql> use mydatabases2;
Database changed
mysql> create table class(
    ->  name varchar(10)
    -> );
Query OK, 0 rows affected (0.01 sec)

--表选项:Engine:存储引擎
--        Charset:字符集
--        Collate:校对集

create table student(
    name varchar(10)
)charset utf8;

mysql> create table student(
    ->  name varchar(10)
    -> )charset utf8;
Query OK, 0 rows affected (0.01 sec)

--复制表,只会复制结构不会复制数据
--只要使用 数据库.表名 就可以随意使用
create table 新表名 like 表名;

--显示数据表
--innodb存储引擎在外部储存
use mydata;
show tables;

--匹配显示表
show tables like 'c%';

mysql> show tables like '_l%';
+------------------------+
| Tables_in_mydata (_l%) |
+------------------------+
| class                  |
+------------------------+
1 row in set (0.00 sec)

--显示其他数据库中的所有表
mysql> show tables from mydata2;
+-------------------+
| Tables_in_mydata2 |
+-------------------+
| class             |
+-------------------+
1 row in set (0.00 sec)

mysql> show tables from mydata3;
Empty set (0.00 sec)


--显示表结构
describe 表名;
desc 表名;
show colums from 表名;
--也可以数据库.表名
mysql> show columns from mydata2.class;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
1 row in set (0.02 sec)

--显示表创建语句
show create table 表名;
mysql> show create table class;
+-------+--------------------------------
-----------------------+
| Table | Create Table
                       |
+-------+--------------------------------
-----------------------+
| class | CREATE TABLE `class` (
  `name` varchar(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk |
+-------+--------------------------------
-----------------------+
1 row in set (0.00 sec)

--多种语句结束符
;或者\g
\G
mysql> show create table class\G
*************************** 1. row ***************************
       Table: class
Create Table: CREATE TABLE `class` (
  `name` varchar(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk
1 row in set (0.00 sec)

--设置表属性 engine charset collate
alter table 表名 表选项 [=] 设置

alter table class charset gbk;
mysql> alter table mydata2.class charset gbk;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

--查看表属性
mysql> show create table mydata2.class\G
*************************** 1. row ***************************
       Table: class
Create Table: CREATE TABLE `class` (
  `name` varchar(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk
1 row in set (0.01 sec)

--修改表名:取数据库的前两个字母加下划线
rename table 表名 to 新表名;

mysql> show create table mydata2.class\G
*************************** 1. row ***************************
       Table: class
Create Table: CREATE TABLE `class` (
  `name` varchar(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk
1 row in set (0.01 sec)

--修改表选项
alter table 表名 表选项 [=] 选项中

--新增字段(默认在最后面添加)
alter table 表名 add[column] 新字段名 列类型;

alter table newclass add column age int;
mysql> alter table newclass add column age int;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

--desc 表名 查看字段
mysql> desc newclass;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

--字段位置,如何在任意位置添加字段
--first:第一个字段 
mysql> alter table newclass add id int first;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc newclass;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

--after 字段名:放在某个具体字段后

mysql> alter table newclass add io int after name;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc newclass;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| io    | int(11)     | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

--修改字段名 change
alter table 表名 change 旧字段 新字段名 新字段名类型;
mysql> alter table newclass change io nio int;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc newclass;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| nio   | int(11)     | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

--修改字段类型或者属性 modify 
alter table 表名 modify 字段名 新类型 [新属性] [新位置];

mysql> alter table newclass modify name varchar(20);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc newclass;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| nio   | int(11)     | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

--删除 drop
alter table 表名 drop 字段名;

mysql> alter table newclass drop name;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc newclass;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
| nio   | int(11) | YES  |     | NULL    |       |
| age   | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
3 rows in set (0.02 sec)

--删除表结构
drop table 表名[,表名2...] 可以同时删除多个;

mysql> create table class; --多创建一个表
ERROR 1113 (42000): A table must have at least 1 column
mysql> create table class(
    -> name varchar(10)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+-------------------+
| Tables_in_mydata2 |
+-------------------+
| class             |
| newclass          |
+-------------------+
2 rows in set (0.00 sec)

mysql> drop table class,newclass;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
Empty set (0.00 sec)

--数据操作
--插入操作
insert into 表名 [(字段列表)] valuse (对应字段列表);

--字段名要和输入的值相对应
mysql> insert into class (name,age) values('jack',23);
Query OK, 1 row affected (0.00 sec)

--所有字段插入数据
insert into 表名 values (对应字段列表);
--要与默认的表结构字段列表相对应
mysql> insert into class values('lpl',10);
Query OK, 1 row affected (0.00 sec)

--查询操作
--所有数据
select * from 表名;
mysql> select * from class;
+------+------+
| name | age  |
+------+------+
| jack |   23 |
| tom  |   11 |
| han  | NULL |
| lpl  |   10 |
+------+------+
4 rows in set (0.00 sec)

--部分字段
select 字段列表 from 表名;

mysql> select name from class;
+------+
| name |
+------+
| jack |
| tom  |
| han  |
| lpl  |
+------+
4 rows in set (0.00 sec)

mysql> select name,age from class;
+------+------+
| name | age  |
+------+------+
| jack |   23 |
| tom  |   11 |
| han  | NULL |
| lpl  |   10 |
+------+------+
4 rows in set (0.00 sec)

--条件查询
select 字段列表 / * from 表名 where 字段名=值;

mysql> select * from class where age = 11;
+------+------+
| name | age  |
+------+------+
| tom  |   11 |
+------+------+
1 row in set (0.00 sec)

mysql> select * from class where age < 30;
+------+------+
| name | age  |
+------+------+
| jack |   23 |
| tom  |   11 |
| lpl  |   10 |
+------+------+
3 rows in set (0.00 sec)

--删除操作
delete from 表名 [where 条件];

mysql> delete from class where age = 11;
Query OK, 1 row affected (0.00 sec)

mysql> select * from class where age < 30;
+------+------+
| name | age  |
+------+------+
| jack |   23 |
| lpl  |   10 |
+------+------+
2 rows in set (0.00 sec)


--更新操作
update 表名 set 字段名 = 新值 [where 条件];
--否则整张表都会改为同一新值
--要注意where的条件,是字符串类型
mysql> update class set age = 99 where name = 'han';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from class;
+------+------+
| name | age  |
+------+------+
| jack |   23 |
| han  |   99 |
| lpl  |   10 |
+------+------+
3 rows in set (0.00 sec)


--高级数据操作做
--多数据插入
insert into 表名[字段列表 values [值列表],[值列表]...]

insert into mydata3 values('a'),('b'),('c');
mysql> insert into mydata3.class values('as',11);
Query OK, 1 row affected (0.00 sec)

mysql> select * from mydata3.class;
+------+------+
| name | age  |
+------+------+
| jack |   23 |
| as   |   11 |
| han  |   99 |
| lpl  |   10 |
+------+------+
4 rows in set (0.00 sec)

--主键冲突
--主键冲突更新
insert into 表名[(字段列表)]values(值列表)on duplicate update 字段 = 新值;
mysql> insert into class values ('0001','2');
Query OK, 1 row affected (0.00 sec)
--主键值为1
mysql> select * from class;
+------+------+
| id   | name |
+------+------+
| 1    | a    |
| 2    | b    |
| 0001 | 2    |

--修改主键失败
mysql> insert into class values ('1','f');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

--冲突更新
mysql> insert into class values ('1','f') on duplicate key update name = 'f';
Query OK, 2 rows affected (0.00 sec)

--再次查询
mysql> select * from class;
+------+------+
| id   | name |
+------+------+
| 1    | f    |
| 2    | b    |
| 0001 | 2    |
+------+------+

--主键冲突替换
replace into [(字段列表)] values (值列表);
--效率差
mysql> replace into class values('1','213123');
Query OK, 2 rows affected (0.00 sec)

mysql> select * from class;
+------+--------+
| id   | name   |
+------+--------+
| 1    | 213123 |
| 2    | b      |
| 0001 | 2      |
+------+--------+
3 rows in set (0.00 sec)

--蠕虫复制
--成倍复制
--用来测试表的压力与效率(索引)
insert into 表名[(字段列表)] select */字段列表 from 表;

mysql> insert into simp(name) select name from simp;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from simp;
+------+
| name |
+------+
| 1    |
| 2    |
| 3    |
| 1    |
| 2    |
| 3    |
+------+
6 rows in set (0.00 sec)

--更新数据
update 表名 set 字段名 = 新值 where 判断条件;

--使用limit来显示更新数量

update 表名 set 字段名 = 新值 [where 判断条件] limit 数量;
--修改的行数为5
mysql> update simp set name='9' where name='2' limit 5;
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5  Changed: 5  Warnings: 0
 

展开阅读全文

没有更多推荐了,返回首页