MySQL,写两句~

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,028评论 0 19
  • MySQL 数据库常用命令 1、MySQL常用命令 create database name; 创建数据库 use...
    55lover阅读 4,770评论 1 57
  • 目录 MySQL简介 基本输入查询 创建并使用数据库 SELECT语句 选择特殊行 条件 通配符 选择特殊列 排序...
    鬼宇书生阅读 1,030评论 2 1
  • MySQL5.6从零开始学 第一章 初始mysql 1.1数据库基础 数据库是由一批数据构成的有序的集合,这些数据...
    星期四晚八点阅读 1,133评论 0 4
  • 工作状态: 1.尽职尽责,将自己的事情、工作做到它因有的状态。 2.团结助人,和同事上下级打理好关系,共同发展事业...
    王德彪阅读 106评论 0 0