MySQL学习我爱编程

MySQL,写两句~

2016-09-17  本文已影响115人  Burjal
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

上一篇下一篇

猜你喜欢

热点阅读