在创建完数据库——表——字段之后,数据库框架基本搭建完毕,此时就进入最重要的一步,为数据库添加实际的各种数据。
数据关联
每一条数据都有这个表的唯一键值关联。id就是一个键值。
mysql> select * from zx_users;
+----+-------+----------------------------------+--------+---------------------+
| id | vname | vpwd | phone | add_time |
+----+-------+----------------------------------+--------+---------------------+
| 2 | user1 | e10adc3949ba59abbe56e057f20f883e | NULL | 2017-11-05 10:32:15 |
| 3 | user1 | e10adc3949ba59abbe56e057f20f883e | 10086 | 2017-11-05 10:49:28 |
+----+-------+----------------------------------+--------+---------------------+
2 rows in set
建表时,设定键值就是这张表的关联值,该值唯一确定,不能重复。
查询数据:SELECT
查询一张表的所有信息
SQL命令:
SELECT <tablename>.* from <tablename>;
忽略表名
这里面的表名可以省略:<tablename>.*
mysql> select zx_users.* from zx_users;
+----+-------+----------------------------------+--------+---------------------+
| id | vname | vpwd | phone | add_time |
+----+-------+----------------------------------+--------+---------------------+
| 2 | user1 | e10adc3949ba59abbe56e057f20f883e | NULL | 2017-11-05 10:32:15 |
| 3 | user1 | e10adc3949ba59abbe56e057f20f883e | 10086 | 2017-11-05 10:49:28 |
+----+-------+----------------------------------+--------+---------------------+
2 rows in set
查询关键字筛选
查询数据,通过WHERE来过滤信息
mysql> select * from zx_users where phone = '10086';
+----+-------+----------------------------------+-------+---------------------+
| id | vname | vpwd | phone | add_time |
+----+-------+----------------------------------+-------+---------------------+
| 3 | user1 | e10adc3949ba59abbe56e057f20f883e | 10086 | 2017-11-05 10:49:28 |
+----+-------+----------------------------------+-------+---------------------+
1 row in set
查询内容筛选
查询内容“*”为查询全部,也可以查询其中的几个,用逗号分隔。
mysql> select vname,vpwd,phone from zx_users where phone = '10086';
+-------+----------------------------------+-------+
| vname | vpwd | phone |
+-------+----------------------------------+-------+
| user1 | e10adc3949ba59abbe56e057f20f883e | 10086 |
+-------+----------------------------------+-------+
1 row in set
修改数据:UPDATE
SQL命令:
UPDATE <tablename> SET
修改多个内容通过逗号间隔。
mysql> update zx_users set vname = 'user2',vpwd = MD5('654321') where phone = '10086';
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from zx_users where vname = 'user2';
+----+-------+----------------------------------+-------+---------------------+
| id | vname | vpwd | phone | add_time |
+----+-------+----------------------------------+-------+---------------------+
| 3 | user2 | c33367701511b4f6020ec61ded352059 | 10086 | 2017-11-05 10:49:38 |
+----+-------+----------------------------------+-------+---------------------+
1 row in set
插入数据:INSERT
SQL命令:
INSERT INTO <tablename>(columnname,...) VALUES('value',...);
插入的多个值用逗号间隔,字段允许为空的值可以忽略不填,不允许为空的值一定要填充,不然插入失败。
mysql> INSERT INTO zx_users(vname,vpwd) VALUES('user3',MD5('qwerty'));
Query OK, 1 row affected
mysql> select * from zx_users;
+----+-------+----------------------------------+-------+---------------------+
| id | vname | vpwd | phone | add_time |
+----+-------+----------------------------------+-------+---------------------+
| 2 | user1 | e10adc3949ba59abbe56e057f20f883e | NULL | 2017-11-05 10:32:15 |
| 3 | user2 | c33367701511b4f6020ec61ded352059 | 10086 | 2017-11-05 10:49:38 |
| 4 | user3 | d8578edf8458ce06fbc5bb76a58c5ca4 | NULL | 2017-11-07 22:40:30 |
+----+-------+----------------------------------+-------+---------------------+
3 rows in set
删除数据:DELETE
SQL语句:
DELETE FROM <tablename> where <columnname>
根据字段删除该条语句。
mysql> select * from zx_users;
+----+-------+----------------------------------+-------+---------------------+
| id | vname | vpwd | phone | add_time |
+----+-------+----------------------------------+-------+---------------------+
| 2 | user1 | e10adc3949ba59abbe56e057f20f883e | NULL | 2017-11-05 10:32:15 |
| 3 | user2 | c33367701511b4f6020ec61ded352059 | 10086 | 2017-11-05 10:49:38 |
| 4 | user3 | d8578edf8458ce06fbc5bb76a58c5ca4 | NULL | 2017-11-07 22:40:30 |
+----+-------+----------------------------------+-------+---------------------+
3 rows in set
mysql>DELETE FROM zx_users where vname = 'user3';
Query OK, 1 row affected
mysql> select * from zx_users;
+----+-------+----------------------------------+-------+---------------------+
| id | vname | vpwd | phone | add_time |
+----+-------+----------------------------------+-------+---------------------+
| 2 | user1 | e10adc3949ba59abbe56e057f20f883e | NULL | 2017-11-05 10:32:15 |
| 3 | user2 | c33367701511b4f6020ec61ded352059 | 10086 | 2017-11-05 10:49:38 |
+----+-------+----------------------------------+-------+---------------------+
2 rows in set
MySQL函数
数据加密函数
不可逆函数
1、MD5加密
mysql> select MD5('qwerty');
+----------------------------------+
| MD5('qwerty') |
+----------------------------------+
| d8578edf8458ce06fbc5bb76a58c5ca4 |
+----------------------------------+
1 row in set
对用户密码进行加密
mysql> INSERT INTO zx_users(vname,vpwd,pwdtype) values ('userpwd',MD5('123456'),'MD5');
Query OK, 1 row affected
mysql> select * from zx_users where pwdtype = 'MD5';
+----+---------+----------------------------------+---------+--------+---------------------+
| id | vname | vpwd | pwdtype | phone | add_time |
+----+---------+----------------------------------+---------+--------+---------------------+
| 4 | userpwd | e10adc3949ba59abbe56e057f20f883e | MD5 | 321654 | 2017-11-08 22:22:51 |
+----+---------+----------------------------------+---------+--------+---------------------+
1 row in set
2、SHA加密
mysql> select SHA('123456');
+------------------------------------------+
| SHA('123456') |
+------------------------------------------+
| 7c4a8d09ca3762af61e59520943dc26494f8941b |
+------------------------------------------+
1 row in set
对用户密码进行加密
mysql> INSERT INTO zx_users(vname,vpwd,pwdtype) values ('userpwd',SHA('123456'),'SHA');
Query OK, 1 row affected
mysql> select * from zx_users where pwdtype = 'SHA';
+----+---------+------------------------------------------+---------+-------+---------------------+
| id | vname | vpwd | pwdtype | phone | add_time |
+----+---------+------------------------------------------+---------+-------+---------------------+
| 5 | userpwd | 7c4a8d09ca3762af61e59520943dc26494f8941b | SHA | NULL | 2017-11-08 22:24:43 |
+----+---------+------------------------------------------+---------+-------+---------------------+
1 row in set
3、PASSWORD
mysql> select PASSWORD('qwerty');
+-------------------------------------------+
| PASSWORD('qwerty') |
+-------------------------------------------+
| *AA1420F182E88B9E5F874F6FBE7459291E8F4601 |
+-------------------------------------------+
1 row in set
对用户密码进行加密
mysql> INSERT INTO zx_users(vname,vpwd,pwdtype) values ('userpwd',PASSWORD('123456'),'PASSWORD');
Query OK, 1 row affected
mysql> select * from zx_users where pwdtype = 'PASSWORD';
+----+---------+-------------------------------------------+----------+-------+---------------------+
| id | vname | vpwd | pwdtype | phone | add_time |
+----+---------+-------------------------------------------+----------+-------+---------------------+
| 6 | userpwd | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | PASSWORD | NULL | 2017-11-08 22:25:24 |
+----+---------+-------------------------------------------+----------+-------+---------------------+
1 row in set
秘钥函数
对于MySQL秘钥函数的存储,不能用字符型进行存储,需要创建二进制blob型进行存储。
创建二进制字段存储密码:
SQL命令:
ALTER TABLE zx_users ADD COLUMN npwd tinyblob NULL DEFAULT NULL AFTER vpwd;
mysql> ALTER TABLE zx_users ADD COLUMN npwd tinyblob NULL DEFAULT NULL AFTER vpwd;
Query OK, 0 row affected
Records: 0 Duplicates: 0 Warnings: 0
1、ENCODE与DECODE,加密与解密
mysql> select ENCODE('123456','name');
+-------------------------+
| ENCODE('123456','name') |
+-------------------------+
| m���< |
+-------------------------+
1 row in set
mysql> select DECODE(encode('123456','name'),'name');
+----------------------------------------+
| DECODE(encode('123456','name'),'name') |
+----------------------------------------+
| 123456 |
+----------------------------------------+
1 row in set
对用户密码进行加密
mysql> INSERT INTO zx_users(vname,bpwd,pwdtype) values ('userpwd',ENCODE('123456','userpwd'),'ENCODE');
Query OK, 1 row affected
mysql> select * from zx_users where pwdtype = 'ENCODE';
+----+---------+------+-------+---------+-------+---------------------+
| id | vname | vpwd | bpwd | pwdtype | phone | add_time |
+----+---------+------+-------+---------+-------+---------------------+
| 8 | userpwd | NULL | [虾?? | ENCODE | NULL | 2017-11-08 22:49:09 |
+----+---------+------+-------+---------+-------+---------------------+
1 row in set
2、AES_ENCRYPT与AES_DECRYPT,加密与解密
加密
mysql> select AES_ENCRYPT('123456','name');
+------------------------------+
| AES_ENCRYPT('123456','name') |
+------------------------------+
| /O�as�\��� |
+------------------------------+
1 row in set
解密
mysql> select AES_DECRYPT(AES_ENCRYPT('123456','name'),'name');
+--------------------------------------------------+
| AES_DECRYPT(AES_ENCRYPT('123456','name'),'name') |
+--------------------------------------------------+
| 123456 |
+--------------------------------------------------+
1 row in set
对用户密码进行加密
mysql> INSERT INTO zx_users(vname,bpwd,pwdtype) values ('userpwd',AES_ENCRYPT('123456','userpwd'),'AES_ENCRYPT');
Query OK, 1 row affected
mysql> select * from zx_users where pwdtype = 'AES_ENCRYPT';
+----+---------+------+---------------+-------------+-------+---------------------+
| id | vname | vpwd | bpwd | pwdtype | phone | add_time |
+----+---------+------+---------------+-------------+-------+---------------------+
| 9 | userpwd | NULL | 魓?盉?殸?帤n2 | AES_ENCRYPT | NULL | 2017-11-08 22:51:15 |
+----+---------+------+---------------+-------------+-------+---------------------+
1 row in set
时间函数
获取时间
1、now()
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2017-11-11 10:36:46 |
+---------------------+
1 row in set
2、current_timestamp()
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2017-11-11 10:36:50 |
+---------------------+
1 row in set
3、curtime()
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 10:36:57 |
+-----------+
1 row in set
时间格式转换
date_format
mysql> SELECT date_format(current_timestamp, '%Y%m%d%H%i%s');
+------------------------------------------------+
| date_format(current_timestamp, '%Y%m%d%H%i%s') |
+------------------------------------------------+
| 20171111103930 |
+------------------------------------------------+
1 row in set
mysql> SELECT date_format(current_timestamp, '%Y%m%d');
+------------------------------------------+
| date_format(current_timestamp, '%Y%m%d') |
+------------------------------------------+
| 20171111 |
+------------------------------------------+
1 row in set