MySQL,写两句~

作者: Burjal | 来源:发表于2016-09-17 12:02 被阅读115次
    MySQL 从放弃到入门

    很久没有写sql语句了,今天当需要讲数据库的时候(是的,就是那样~),发现已经手生了,深夜看文档后写下了这篇文章。

    这篇文章主要是针对有一定数据库基础知识的盆友。是的,就像走两步是检验脚一样,作为了解数据库的我们,得:写两句。当然,如果是对数据库知之甚少的伙伴,按照本文的示例也能初步感受sql语句的魅力(就那么几句)。数据库版本尤其是商用版本够多,但是基本sql语句都是大同小异,本文主要是针对MySql。

    开发过程中,个人非常热衷官方文档。能用看文档解决的问题,都不是大问题,如果有问题,那就再看一遍!

    所以,不得不第一个提起的就是:

    >mysql --help


    Step 1, connecting&disconnecting

    当我们需要数据库服务的时候,首先得通过既有账号和密码连接到数据库。

    >mysql -h host -u user -p

    Enter password:

    -h:what host(不填则为连接本机上的MySQL), -u:user name, -p:password to use,输入密码后就可以对数据库进行各种温柔的交流了。

    当我们不再需要操作数据库的时候,作为一个有始有终的人,这个时候一定不能原谅自己忘了断开连接。

    mysql> QUIT(or \q)

    如果使用的是Unix,也可通过 Control+D 断开数据库连接。


    Step 2,写两句

    第一步我们已经成功与数据库建立连接,下面就开始本文的重点啦,嗯,写上两句。


    2.1 首先,得有数据库

    查看当前server上已经存在数据库,[关键词 SHOW]:

    mysql>SHOW DATABASES;

    特别注意:当前用户是否拥有SHOW_DDATABASES 权限。

    如果没有既有的数据库,则需要创建数据库(库名:test),[关键词 CREATE]:

    mysql> CREATE DATABASE test;

    注意:Unix环境下是区分大小写的,所以,建表的时候表名避免大小写混写,数据库命名也是如此!

    访问数据库(本地存在该数据库,本文测试数据库名均为test),[关键词 USE]:

    mysql> USE test


    2.2 其次,得有表

    基于步骤2.1已经访问到特定数据库后,产看当前数据库所有表,[关键词 SHOW TABLES]:

    mysql> SHOW TABLES;

    如果没有需要的表的时候,则创建一张新的表(表名 user),[关键词 CREATE TABLE]:

    mysql> CREATE TABLE user (name VARCHAR(20), sex CHAR(1), birth DATE);

    表名:user,每个user都有name,sex以及birth三个属性值。VARCHAR长度可以为1-65535,为“节能减排”,对某些属性设置特定长度可以有效的减小资源占用,如name设置长度为20。当后期有变更的时候,可以使用ALTER TABLE对已有表添加、修改或删除列。

    mysql> create table users (id int(4) primary key not null auto_increment,name varchar(20) not null default '', gender char(1) not null default 'm',address varchar(20), tel varchar(20));

    表名:users,每个user都有一个自增的主键id,name,gender,address以及tel三个属性值。

    当成功创建表需要查看创建表语句检验是否符合设计预期,或者忘记表中列的属性定义的时候,可以查看表各列及其属性,[关键词 DESCRIBEDESC]:

    mysql> DESCRIBE user;

    2.3 填充数据

    将本地文件按顺序填充到数据库:

    mysql> LOAD DATA LOCAL INFILE '/path/users.txt' INTO TABLE user;

    若文件是在Windows上创建,则需要将上述语句改成:

    mysql> LOAD DATA LOCAL INFILE '/path/users.txt' INTO TABLE user LINES TERMINATED BY '\r\n\';

    在OS X系统上,对应修改成 LINES TERMINATED BY '\r'

    插入数据,[关键词 INSERT]:

    mysql> INSERT INTO user VALUES ('John', 'f', '1999-01-01');

    当插入值缺失的时候,用NULL代替。


    2.4 操作表

    ·1 最简单的方式,获取表中所有数据 [关键词SELECT]

    mysql> SELECT * FROM user;

    ·2 获取特定行

    mysql> SELECT * FROM user WHERE name = 'Tommy';

    mysql> SELECT * FROM user WHERE birth >= '2000-01-01';

    mysql> SELECT * FROM user WHERE name = 'Tommy' OR name = 'Tom';

    mysql> SELECT * FROM user WHERE (sex = 'm' AND birth >= '2000-01-01') OR (sex = 'f' AND birth >= '2005-01-01');

    ·3 获取特定列

    mysql> SELECT name, birth FROM user;

    mysql> SELECT DISTINCT birth FROM user;  

    DISTINCT:相同结果只输出一次。

    ·4 排序,[关键词 ORDER BY,默认排序为升序,降序则添加关键词 DESC]

    mysql> SELECT name, birth FROM user ORDER BY birth;

    mysql> SELECT name, birth FROM user ORDER BY birth DESC;

    mysql>SELECT name, birth FROM user ORDER BY sexbirth DESC;

    关键词DESC只对紧邻产生影响(birth)。

    ·5 修改一条数据的值,[关键词 UPDATE]

    mysql> UPDATE user SET birth = '2000-01-01' WHERE name = 'Tommy';

    ·6 ALTER

    (1)修改表名:

    mysql> ALTER TABLE user RENAME TO db_user;

    (2)增加主键:

    mysql> ALTER TABLE user ADD id int(5) unsigned NOT NULL AUTO_INCREMENT , ADD PRIMARY KEY(id);

    (3)修改id为自增,并设置为主键:

    mysql> ALTER TABLE user MODIFY id INT AUTO_INCREMENT PRIMARY KEY;

    (4)增加字段:

    mysql> ALTER TABLE user ADD (address varchar(20));

    (5)修改字段默认值:

    mysql> ALTER TABLE user ALTER COLUMN gender set default 0;

    (6)在某个自断后增加字段:

    mysql> ALTER TABLE user ADD COLUMN email VARCHAR(20) NOT NULL DEFAULT ''AFTER tel;

    (7)修改原字段名称及类型,修改字段名时必须重新制定字段类型:

    mysql> ALTER TABLE user CHANGE project project_new varchar(20) NOT NULL DEFAULT '';

    (8)删除字段:

    mysql> ALTER TABLE db_teacher DROP address;

    (9)修改一个字段类型:

    mysql> ALTER TABLE db_teacher MODIFY gender INT(1) UNSIGNED DEFAULT 0;

    ·7 NULL

    NULL虐我千百遍,还得待她如初恋~

    官方文档对于NULL的定义是:a missing unknown value

    对于值的NULL判断,[关键词 IS NULLIS NOT NULL]:

    mysql> SELECT 1 IS NULL, 1 IS NOT NULL;

    1不为NULL,故上述结果分别是0,1。

    注意:将一个值与NULL进行比较运算(=, <, <>),结果均为NULL。

    查看更多比较运算

    ·8 统计数据条数 [关键方法 COUNT(*)]

    mysql> SELECT COUNT(*) FROM user;     注:统计用户数

    mysql> SELECT sex, COUNT(*) FROM user GROUP BY sex;    注:统计male,female (如果有NULL则还有NULL)人数

    查看更多分组运算

    ·9 Pattern Matching

    MySQL提供了正则表达式相关的模式匹配方法。

    (1),"_":匹配一个字符,“%”:匹配任意字符数(包括0);

    (2),不区分大小写;

    (3),关键词 LIKENOT LIKE

    mysql> SELECT * FROM user WHERE name LIKE 'a%';   注:名字以a开头

    mysql> SELECT * FROM user WHERE name LIKE '%s';    注:名字以s结束

    mysql> SELECT * FROM user WHERE name NOT LIKE '%b%';    注:名字不包含b

    mysql> SELECT * FROM user WHERE name LIKE  '___';      注:名字长度为5个字符

    查看更多正则表达运算符

    ·10 多表查询

    为准确记录用户一些重大事件,目前仅只有一张user表已经无法满足我们的需求了,新增一张event表,分别记录用户名,日期,事件类型以及备注。

    mysql> CREATE TABLE event (name VARCHAR(20), date DATE, type VARCHAR(15), describe VARCHAR(255));

    将数据导入或插入表中。

    event表中记录用户一条type为marry的结婚事件,现在需要查询各用户的结婚年龄:

    mysql> SELECT user.name, TIMESTAMPDIFF(YEAR,birth, date) AS age, desc FROM user INNER JOIN event ON user.name = event.name WHERE event.type = 'marry';

    有时候也用当前表join表本身用于计算。

    mysql> SELECT u1.name, u1.sex FROM user AS u1 INNER JOIN user AS u2 ON u1.birth = u2.birth AND u1.sex = 'f' AND u2.sex = 'm';

    ·11 日期计算

    日期计算在数据库使用中非常普遍。MySQL也提供了日期相关的计算方法。

    计算年龄,[方法 TIMESTAMPDIFF()]

    mysql> SELECT name, birth, CURDATE(),  TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age FROM user;

    mysql> SELECT name, birth, CURDATE(),  TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age FROM user ORDER BY age;

    mysql> SELECT name, birth, CURDATE(), TIMESTAMPDIFF(YEAR,birth, CURDATE()) AS age FROM user WHERE birth IS NOT NULL ORDER BY age;

    上述sql语句执行结果是:输出会增加显示当前时间(CURDATE()),年龄age(TIMESTAMPDIFF(YEAR,birth,CURDATE()))。

    mysql> SELECT name, birth, MONTH(birth) FROM user;

    获取特定日期的月份使用 MONTH(),相似方法还有YEAR(),MONTH(),DAYOFMONTH()等,查看MySQL更过日期、时间计算方法


    好了,本次关于找回MySQL曾经内容就到这了,后续会写深入MySQL相关内容。

    文中若有疏漏及错误,烦请斧正,谢谢。

    在中秋假期的最后一天祝各位看官中秋快乐~

    附:官方文档地址 MySQL 5.6 Reference Manual

    相关文章

      网友评论

      本文标题:MySQL,写两句~

      本文链接:https://www.haomeiwen.com/subject/qpiiettx.html