MYSQL培训经典教程读书笔记

mysqldump 导出数据

mysqlimport 导入数据

mysqlaadmin 查看服务器状态 关闭重启 刷新缓存 mysql


字符串值 可以用双引号 和单引号括起来。

十六进制数字不区分大小写,但其前缀 0x 不能为0X 即 0x0a和0x0A 但是0X0a 和0X0A 不是合法的


mysql> SELECT 0x5061756c+0,0x5061765c;
+--------------+------------+
| 0x5061756c+0 | 0x5061765c |
+--------------+------------+
|   1348564332 | Pav\       |
+--------------+------------+
1 row in set (0.00 sec)


ESC+D删词
ESC +BACKSPACE 删除左边的词
CTRL+D 删除光标所在的字
CTRL+A 移动光标到行头
CRTL+E 移动光标到尾行




SHOW DATABASES LIKE 'l%'


MYSQL 将总是创建一个.frm 文件保存表和列定义 视表类型而定 索引和数据将在其他文件中存储
.myi存储索引


SHOW TABLES [FROM DBNAME ][LIKE WILD]
mysql> SHOW TABLES FROM MYSQL LIKE '%USER%';     
+--------------------------+
| Tables_in_mysql (%USER%) |
+--------------------------+
| user                     |
+--------------------------+
1 row in set (0.00 sec)




SHOW COLUMNS FROM TABLENAME [FROM DBNAME ] [LIKE WILD]
mysql> SHOW COLUMNS  FROM USER FROM MYSQL LIKE '%HOST%';
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| Host  | char(60) | NO   | PRI |         |       |
+-------+----------+------+-----+---------+-------+
1 row in set (0.00 sec)






SHOW INDEX FROM TABLENAME [FROM DBNAME]
mysql> SHOW INDEX FROM USER FROM MYSQL;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| user  |          0 | PRIMARY  |            1 | Host        | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
| user  |          0 | PRIMARY  |            2 | User        | A         |          12 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)


SHOW TABLE STATUS FROM MYSQL LIKE '%USER%'\G --注意不能用SHOW TABLE STATUS FROM MYSQL.USER; 报错
mysql> SHOW TABLE STATUS FROM MYSQL LIKE '%user%'\G;
*************************** 1. row ***************************
           Name: user
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 12
 Avg_row_length: 104
    Data_length: 2748
Max_data_length: 281474976710655
   Index_length: 2048
      Data_free: 1496
 Auto_increment: NULL
    Create_time: 2014-03-26 01:33:16
    Update_time: 2014-08-12 14:07:16
     Check_time: NULL
      Collation: utf8_bin
       Checksum: NULL
 Create_options: 
        Comment: Users and global privileges
1 row in set (0.00 sec)


ERROR: 
No query specified


DESC DBNAME.TABLENAME 
mysql> DESC MYSQL.USER;
DESCRIBE MYSQL.USER;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
| Password               | char(41)                          | NO   |     |         |       |
| 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       |       |


如果一个用户没有一个表的任何权限 表将不再SHOW TABLES 或mysqlshow db_name 表现出来






CREATE TABLE  GUSETBOOK 
( VISITOR VARCHAR(40),
COMMENTS TEXT,
ENTRYDATE DATETIME ) [TYPE=HEAP];


隐含的列说明的改变
在某些情况下MYSQL隐含的改变在一个CREATE TABLE 语句中给出的一个列的说明 这也可能在ALTER TABLE;
1 长度小于4的VARCHAR被改变为CHAR
2 如果再一个表中的任何列有可变化长度 结果是整个行是变长的。因此 如果一张表中包含任何变长的列 VARCHAR TEXT BLOB 所有大雨3个祖父的CHAR 列被改编为VARCHAR列 在这任何方面不影响你如何使用 在MYSQL中VARCHAR 只是存储字符的一个不同方法 MYSQL 实施这种改变是因为他节省空间 并且使表操作更快捷。


用SELECT 建立新表
如果拷贝数据表发生任何错误 表自动删除


CREATE TABLE TEST2
(B INT,
C VARCHAR(10))
INSERT INTO TEST2 VALUES(1,'a')


CREATE TABLE TEST
(A INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(A),KEY (B))
SELECT B,C FROM TEST2;


可以通过选择一个标的全部内容来拷贝一个表 或者失败的WHERE字句建立空表
mysql> create table test1  select * from test where 0;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0


mysql> select * from test1;
Empty set (0.00 sec)
INSERT INTO SELECT * FROM 可以跟随ORDER BY 字句
mysql> INSERT INTO TEST1 SELECT * FROM TEST ORDER BY A;
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0


INSERT INTO SELECT * FROM 可以跟随ORDER BY 并且可以是表本身
mysql> INSERT INTO TEST1 SELECT * FROM TEST1  ORDER BY B DESC;
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0


3.5.4 LOAD
LOAD DATA INFILE 必须对服务器主机上有file 的权限





mysql> CREATE TABLE TEST3  SELECT * FROM TEST;
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0


mysql> SELECT * FROM TEST3;
+---+------+------+
| A | B    | C    |
+---+------+------+
| 1 | 1    | a    |
+---+------+------+
1 row in set (0.00 sec)








3.6 查询表中的记录
HAVING 字句必须跟在GROUP BY 字句后面和ORDER 字句之前
WHERE 和HAVING 区别是 HAVING 是第二条件在与其他从句配合使用 


mysql> SELECT * FROM TEST WHERE (A=1 AND b='a') OR (A=1 AND C='b');
+---+------+------+
| A | B    | C    |
+---+------+------+
| 1 | a    | b    |
+---+------+------+
1 row in set (0.00 sec)






增加自增列 必须用 auto_increment  primary key
而且必须是主键
ALTER TABLE TEST ADD ID INT auto_increment primary key;
DESC排序 仅适用于紧跟在塔之前的列的名字, ORDER BY C,B DESC 仅仅按照B排序 即 B排序 再按照C排序






如果两个DESC 会按照左边的DESC 再按照右边DESC
mysql> SELECT * FROM TEST ORDER BY a DESC,ID DESC;
+---+------+------+----+
| A | B    | C    | ID |
+---+------+------+----+
| 3 | 3    | D    |  5 |
| 2 | 2    | E    |  4 |
| 2 | 2    | b    |  2 |
| 1 | 3    | B    | 10 |
| 1 | 3    | A    |  9 |
| 1 | 2    | A    |  8 |
| 1 | 1    | B    |  7 |
| 1 | 2    | B    |  6 |
| 1 | 1    | D    |  3 |
| 1 | 1    | a    |  1 |
+---+------+------+----+
10 rows in set (0.00 sec)





--------------------------------20140819


3.6.5 查询多个表
查询多个表 FROM 字句列出表明 并用逗号分隔 因为查询需要从他们两个拉出信息
当组合 JOIN 查询来自多个表信息的时候 你需要制定在一个表中的记录怎么样能匹配其他表的记录
这很简单 因为他们都有一个name列 查询使用WHERE 字句基于NAME值来匹配两个表中的记录
因为NAME 列出现在两个表中 
当引用列的时候你一定要指定哪个表 这通过把表明附在列明前做到。


3.7.1
UPDATE TABLENAME SET 要更改的列
WHERE  要更新的记录


这里的WHERE 字句是可选的 因为如果不指定 表中的每个记录都会被更改
UPDATE PET SET SEX='F'WHERE NAME ='WHISTLER'


DELETE FROM TABLENAME WHERE 要删除的记录




4.1 集合函数 它只返回一个数
SELECT COUNT(*) FROM PET WHERE SPECIES ='CAT'


SELECT COUNT(SPECIES) FROM PET;
SELECT COUNT (DESTINCT SPECIES) FROM PET; DESTINCT 决定只有互不相同的值才被计算。
SELECT COUINT() 字段中的空值 将被忽略;
mysSELECT * FROM TEST;
+---+------+------+----+
| A | B    | C    | ID |
+---+------+------+----+
| 1 | 1    | a    |  1 |
| 2 | 2    | b    |  2 |
| 1 | 1    | D    |  3 |
| 2 | 2    | E    |  4 |
| 3 | 3    | D    |  5 |
| 1 | 2    | B    |  6 |
| 1 | 1    | B    |  7 |
| 1 | 2    | A    |  8 |
| 1 | 3    | A    |  9 |
| 1 | 3    | B    | 10 |
| 4 | D    | NULL | 11 |


mysql> SELECT COUNT(C) FROM TEST; 
+----------+
| COUNT(C) |
+----------+
|       10 |
+----------+
1 row in set (0.00 sec
+---+------+------+----+
11 rows in set (0.00 sec)


AVG()返回字段所有的值的平均值
SUM() 
SELECT SPECIES SUM(CURDATE()-BIRTH) FROM PET GROUP BY SPECIES;
MAX(0 MIN()
SELECT SPECIES MIN(BIRTH) FROM PET GROUP BY SPECIES;


mysql> SELECT CURDATE();
+------------+
| CURDATE()  |
+------------+
| 2014-08-19 |
+------------+
1 row in set (0.00 sec)
mysql> SELECT CURDATE()+0;
+-------------+
| CURDATE()+0 |
+-------------+
|    20140819 |
+-------------+
1 row in set (0.00 sec)


mysql> SELECT CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 17:22:05  |
+-----------+
1 row in set (0.00 sec)


mysql> SELECT CURTIME()+0;
+---------------+
| CURTIME()+0   |
+---------------+
| 172228.000000 |
+---------------+
1 row in set (0.00 sec)


mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2014-08-19 17:24:01 |
+---------------------+
1 row in set (0.00 sec)


mysql> SELECT NOW()+0;
+-----------------------+
| NOW()+0               |
+-----------------------+
| 20140819172422.000000 |
+-----------------------+
1 row in set (0.00 sec)


自动记录数据改变的时间


TIMESTAMP 可以使用它自动的用当前的时间和日期标记INSERT UPDATE 操作 如果你有多个TIMESTAMP 只有第一个自动更新
1 列没有明确的在INSERT  LOADDATE INFILE 语句中指定
2 列没有明确的在UPDATE语句中指定一些另外的列改变值(UPDATE 设置一个列为他已经拥有的值 则不会更新 因为MYSQL为了效率而忽略更改)
3 明确的设定timestamp 列为NULL


mysql> UPDATE TEST SET A=3 WHERE  ID=3 OR ID =4 OR ID=1 OR ID =2 ;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0




ALTER TABLE TEST ADD F_TIMESTAMP TIMESTAMP;
mysql> SELECT * FROM TEST;
+---+------+------+----+---------------------+---------------------+
| A | B    | C    | ID | F_TIMESTAMP         | F_TIMESTAMP1        |
+---+------+------+----+---------------------+---------------------+
| 3 | 1    | a    |  1 | 2014-08-19 17:30:23 | 0000-00-00 00:00:00 |
| 3 | 2    | b    |  2 | 2014-08-19 17:30:48 | 0000-00-00 00:00:00 |
| 3 | 1    | D    |  3 | 2014-08-19 17:30:58 | 0000-00-00 00:00:00 |
| 3 | 2    | E    |  4 | 2014-08-19 17:30:58 | 0000-00-00 00:00:00 |
| 3 | 3    | D    |  5 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 1 | 2    | B    |  6 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 1 | 1    | B    |  7 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 1 | 2    | A    |  8 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 1 | 3    | A    |  9 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 1 | 3    | B    | 10 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 4 | D    | NULL | 11 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
+---+------+------+----+---------------------+---------------------+
11 rows in set (0.00 sec)

你可能感兴趣的:(MYSQL培训经典教程读书笔记)