MYSQL实操日记

作者: Kevin_Luo | 来源:发表于2016-11-13 23:10 被阅读0次

    1、连接、登录MySQL

    搭建好环境,启动MYSQL服务:net start mysql

    然后登录MySQL数据库

    shell>mysql -hhost -uuser -p

    Enter password:********

    2、创建数据库

    mysql>CREATE DATABASE 数据库名;

    mysql>USE 数据库名

    可以在调用mysql时,通过命令行选择数据库,只需要在提供连接参数之后指定数据库名称

    shell>mysql -h hos t-u user -p 数据库名

    Enter password:********

    3、创建表

    3.1 查看现有数据库列表

    mysql>SHOW TABLES;

    3.2 创建一个宠物数据表(名字、主人、种类,性别、出生和死亡日期)

    mysql>CREATE TABLE pet (

    name VARCHAR(20), 

    owner VARCHAR(20),

    species VARCHAR(20), 

    sex CHAR(1), 

    birth DATE, death DATE

    );

    查看表结构是否正确(忘记列名也可用):DESCRIBE pet;

    3.3 插入数据:

    INSERT INTO pet VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

    注意,这里字符串和日期值均为引号扩起来的字符串。另外,可以直接用INSERT语句插入NULL代表不存在的值。

    3.41  SELECT语句:从数据表中检索信息,语句的一般格式是: 

    SELECTwhat_to_select

    FROMwhich_table

    WHEREconditions_to_satisfy;

    实例:SELECT * FROM pet;

    3.42 添加WHERE条件实例:

    SELECT * FROM pet WHERE name = 'Bowser';

    SELECT * FROM pet WHERE birth >'1998-1-1';

    SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';

    SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';

    注意:AND和OR可以混用,但AND比OR具有更高的优先级。如果你使用两个操作符,使用圆括号指明如何对条件进行分组是一个好主意,如:

    SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm') OR (species = 'dog' AND sex = 'f');

    3.43 选择指定列:

    SELECT name, birth FROM pet;

    SELECT owner FROM pet;

    3.44 增加关键字DISTINCT检索出每个唯一的输出记录:

    SELECT DISTINCT owner FROM pet;

    3.45 使用一个WHERE子句结合行选择与列选择。例如,要想查询狗和猫的出生日期

    SELECT name, species, birth FROM pet WHERE species = 'dog' OR species = 'cat';

    3.46 分类行

    按动物生日日期排序:

    SELECT name, birth FROM pet ORDER BY birth;

    注意:默认排序是升序,最小的值在第一。要想以降序排序,在你正在排序的列名上增加DESC(降序 )关键字,如:

    SELECT name, birth FROM pet ORDER BY birth DESC;

    3.47 可以对多个列进行排序,并且可以按不同的方向对不同的列进行排序。例如,按升序对动物的种类进行排序,然后按降序根据生日对各动物种类进行排序(最年轻的动物在最前面)

    SELECT name, species, birth FROM pet ORDER BY species, birth DESC;

    注意 : DESC关键字仅适用于在它前面的列名(birth);不影响species列的排序顺序。

    3.48 模式匹配

    SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。如要想找出以“b”开头的名字:

    SELECT * FROM pet WHERE name LIKE 'b%';

    要想找出以“fy”结尾的名字:

    SELECT * FROM pet WHERE name LIKE '%fy';

    要想找出包含“w”的名字:

    SELECT * FROM pet WHERE name LIKE '%w%';

    要想找出正好包含5个字符的名字,使用“_”模式字符:

    SELECT * FROM pet WHERE name LIKE '_____';

    3.49 计数行

    COUNT(*)函数计算行数,所以计算动物数目的查询应为:

    SELECT COUNT(*) FROM pet;

    如果你想要知道每个主人有多少宠物,可使用GROUP BY对每个owner的所有记录分组,你可以使用COUNT( )函数:,

    SELECT owner, COUNT(*) FROM pet GROUP BY owner;

    每种动物的数量:

    SELECT species, COUNT(*) FROM pet GROUP BY species;

    每种性别的动物数量:

    SELECT sex, COUNT(*) FROM pet GROUP BY sex;

    按种类和性别组合的动物数量:

    SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;

    若使用COUNT( ),你不必检索整个表。例如,前面的查询,当只对狗和猫进行时,应为:

    mysql>SELECT species, sex, COUNT(*) FROM pet

    ->WHERE species = 'dog' OR species = 'cat'

    ->GROUP BY species, sex;

    如果你仅需要知道已知性别的按性别的动物数目:

    mysql>SELECT species, sex, COUNT(*) FROM pet

    ->WHERE sex IS NOT NULL

    ->GROUP BY species, sex;

    3.410 使用1个以上的表

    先创个宠物事件表(宠物名字、发生日期、描述事件的字段、事件类型字段)

    CREATE TABLE event (name VARCHAR(20), date DATE,

    ->type VARCHAR(15), remark VARCHAR(255));

    然后从EVENT表中,查找到宝宝出生日期,找出每只宠物的年龄。

    mysql>SELECT pet.name,

    ->(YEAR(date)-YEAR(birth)) - (RIGHT(date,5)

    ->remark

    ->FROM pet, event

    ->WHERE pet.name = event.name AND event.type = 'litter';

    关于该查询要注意的几件事情:

    FROM子句列出两个表,因为查询需要从两个表提取信息。

    当从多个表组合(联结)信息时,你需要指定一个表中的记录怎样能匹配其它表的记录。这很简单,因为它们都有一个name列。查询使用WHERE子句基于name值来匹配2个表中的记录。

    因为name列出现在两个表中,当引用列时,你一定要指定哪个表。把表名附在列名前即可以实现。

    你不必有2个不同的表来进行联结。如果你想要将一个表的记录与同一个表的其它记录进行比较,可以将一个表联结到自身。例如,为了在你的宠物之中繁殖配偶,你可以用pet联结自身来进行相似种类的雄雌配对:

    mysql>SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species

    ->FROM pet AS p1, pet AS p2

    ->WHERE p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';

    在这个查询中,我们为表名指定别名以便能引用列并且使得每一个列引用与哪个表实例相关联更直观

    3.5. 获得数据库和表的信息

    3.51 列出由服务器管理的数据库:

    mysql>SELECT DATABASE();

    3.52 列出当前的数据库的数据表:

    mysql>SHOW TABLES;

    3.53 查看表结构

    mysql>DESCRIBE pet;

    注意:Field显示列名字,Type是列的数据类型,Null表示列是否能包含NULL值,Key显示列是否被索引而Default指定列的默认值。

    3.54  在批处理模式下使用mysql

    涉及脚本,后续补充

    3.6 常用查询例子

    先创建一个例子表

    CREATE TABLE shop (

    ->article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,

    ->dealer  CHAR(20)                 DEFAULT ''     NOT NULL,

    ->price   DOUBLE(16,2)             DEFAULT '0.00' NOT NULL,

    ->PRIMARY KEY(article, dealer));

    mysql>INSERT INTO shop VALUES

    ->(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),

    ->(3,'C',1.69),(3,'D',1.25),(4,'D',19.95);

    3.6.1. 列的最大值

    “最大的物品号是什么?”

    SELECT MAX(article) AS article FROM shop;

    3.6.2. 拥有某个列的最大值的行

    任务:找出最贵物品的编号、销售商和价格。

    这很容易用一个子查询做到:

    SELECT article, dealer, price

    FROM   shop

    WHERE  price=(SELECT MAX(price) FROM shop);

    另一个解决方案是按价格降序排序所有行并用MySQL特定LIMIT子句只得到第一行:

    SELECT article, dealer, price

    FROM shop

    ORDER BY price DESC

    LIMIT 1;

    :如果有多项最贵的物品(例如每个的价格为19.95),LIMIT解决方案仅仅显示其中一个!

    3.6.3. 列的最大值:按组

    任务:每项物品的的最高价格是多少?

    SELECT article, MAX(price) AS price

    FROM  shop

    GROUP BY article

    3.6.4. 拥有某个字段的组间最大值的行

    任务:对每项物品,找出最贵价格的物品的经销商。

    可以用这样一个子查询解决该问题:

    SELECT article, dealer, price

    FROM  shop s1

    WHERE  price=(SELECT MAX(s2.price)

    FROM shop s2

    WHERE s1.article = s2.article);

    3.6.5. 使用用户变量

    可以清空MySQL用户变量以记录结果,不必将它们保存到客户端的临时变量中。(

    例如,要找出价格最高或最低的物品的,其方法是:

    mysql>SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;mysql>SELECT * FROM shop WHERE price=@min_price OR price=@max_price;

    3.6.6. 使用外键

    未完待续




    3.5 UPDATE更新数据

    mysql>UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';

    相关文章

      网友评论

        本文标题:MYSQL实操日记

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