mysql创建和使用数据库
mysql连接和断开
mysql -h host -u user -p******** /*建议不要在命令行中输入密码,因为这样做会使其暴露给在您的计算机上登录的其他用户窥探*/
mysql -u user -p******** /*登陆自己主机上的服务器*/
mysql /*允许匿名访问*/
host:主机名
user:用户名
****:密码
出现:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)就是服务器没开
断开输入quit 或者\q
输入查询
mysql>SELECT VERSION(); /*查询版本号*/
mysql>SELECT CURRENT_DATE; /*查询时间*/
关键字不区分大小写
mysql 通过查找终止分号来确定语句的结束位置,而不是查找输入行的结尾
/c中断
创建和使用数据库
查询当前存在的数据库
mysql>show databases;
Database changed
如果您没有该 SHOW DATABASES 权限 ,则不会显示您没有权限的数据库 。
创建一个数据库
mysql>create database mytest; /*数据库名字区分大小写mytest和MYTEST不一样*/
如果出现 ERROR 1044 (42000): Access denied for user 'micah'@'localhost' to database 'menagerie' 说明你没有权限区创建一个数据库
选择一个数据库来使用
mysql>use test /*假设计算机存在test数据库*/
当然也可以在调用命令行时选择要使用的数据库,如下
mysql -h host -u user -p mytest********
可以随时查看当前选择使用哪个数据库
mysql>SELECT DATABASE();
创建表
创建表后,可以查看数据库中有几个表
mysql>show tables;
使用 CREATE TABLE 语句指定表的布局:
mysql>create table pet (name VARCHAR(20), owner VARCHAR(20),
mysql>species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
查看表的格式,可以使用DESCRIBE语句:
mysql>DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
把数据加载到表中
创建一个文本文件 pet.txt ,每行包含一个记录,其值由制表符(tab)分隔,并按照 CREATE TABLE 语句 中列出的顺序给出 。 对于缺失值(例如未知性别或仍然生活的动物的死亡日期),使用 NULL 值。 要在文本文件中表示这些,请使用 \N 反斜杠,大写N(用表格记录宠物们的状况)
文本文件格式xiaohong xiaoniao bird \N 1997-12-09 \N
要将文本文件pet.txt加载到pet表中,如下。
mysql> load data local infile '/path/pet.txt' INTO TABLE pet;(linux环境,windows环境可能会出问题)
如果在linux下还是失败了,则可能是默认情况下MySQL未启用本地文件功能
- 如果要一次添加一条新记录,可以用INSERT
假设xiaoming得到了一只名为 “ xiaohong ” 的新小狗 。
mysql> insert into pet
values ('xiaoming','xiaohong','dog','f','1999-03-30',NULL);
字符串和日期值在此处指定为带引号的字符串。 此外, INSERT 可以 NULL 直接 插入 以表示缺失值。
从表中检索信息
select语句用于从表中提取信息。语句的一般形式为:
SELECT what_to_select /指示您要查看的内容。这可以是列的列表,也可以是表示“所有列”。/
FROM which_table /指示从哪个表里面检索数据/
WHERE conditions_to_satisfy /需要满足什么条件*/
选择数据
最简单的形式 SELECT 从表 中 检索所有内容:
mysql> SELECT * FROM pet;
mysql> SELECT * FROM pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
如果发现有错误
编辑文件 pet.txt 以更正错误,然后清空表并使用 DELETE 和 重新加载它 LOAD DATA
mysql> delete from pet
mysql>load data local infile 'pet.txt' INTO TABLE pet;
使用UPDATE语句仅修复错误的记录
mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';
选择特定行
mysql>select * from pet where name = 'Bowser';
可以在任何列上指定条件,而不仅仅是 name
mysql>select * from pet where birth >= '1998-1-1';
也可以结合条件来定位雌性狗
mysql>select * from pet where species = 'dog' and sex = 'f';
有and就有or
mysql>select * from pet where species = 'dog' or species = 'snake';
AND 和 OR 可以混合,但 AND 优先级高于 OR 。 如果同时使用这两个运算符,最好使用括号明确指出条件应如何分组
mysql>select * from pet where (species = 'cat' AND sex = 'm')
OR (species = 'dog' AND sex = 'f');选择特定列
mysql>SELECT name, birth FROM pet;
要找出谁拥有宠物,
mysql>SELECT owner FROM pet;
加关键字检索每个唯一的输出记录一次 DISTINCT
mysql>SELECT DISTINCT owner FROM pet;
可以使用 WHERE 子句将行选择与列选择组合在一起,例如,要仅获取狗和猫的出生日期,请使用以下查询
mysql>SELECT birth from pet where pieces = 'dog' or pieces = 'cat';
排序行
mysql>select name, birth from pet order by birth; //升序排列
mysql>select name,birth from pet order by birth DESC; //降序排列
可以对多个列进行排序,并且可以按不同方向对不同列进行排序。 例如,要按动物类型按升序排序,然后按动物类型中的出生日期按降序排序(同种动物最年轻的动物首先)
mysql>select name ,birth from pet order by speces ,birth desc;
日期计算
TIMESTAMPDIFF() 它的参数是你想要表达结果的单位,以及两个可以取得差异的日期。例子显示了每只宠物的出生日期,当前日期和年龄。 一个 别名age是用来制造最终输出列标签
mysql> SELECT name, birth, CURDATE(),TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
FROM pet;
还可以通过添加一个 ORDER BY 子句来对输出进行排序
mysql>SELECT name, birth, CURDATE(),TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
FROM pet
ORDER BY name;
可以使用类似的查询来确定已经死亡的动物的死亡年龄。您可以通过检查死亡值是否为NULL来确定这些动物是哪些。然后,对于那些具有非NULL值的人,计算有生之年:
mysql:SELECT name, birth, death,TIMESTAMPDIFF(YEAR,birth,death) AS age
FROM pet
WHERE death IS NOT NULL
ORDER BY age;
MySQL提供了用于提取日期的部分,如一些功能 YEAR() , MONTH() 和 DAYOFMONTH()
mysql>SELECT name, birth, MONTH(birth) FROM pet;
查看下个月生日的宠物(今天是1.27)
mysql>SELECT name ,birth FROM pet WHERE MONTH(birth) = 2;
当然也可以在使用模函数(MOD)将月份值包装为0(如果当前值为12)之后,将当前月份后的下个月加1,以得到下个月:
myql>SELECT name, birth FROM petWHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;
NULL值的使用
测试NULL请使用 IS NULL 和 IS NOT NULL 运算符
模式匹配
SQL模式匹配使您可以使用 _ 匹配任何单个字符并 % 匹配任意数量的字符(包括零个字符)。 在MySQL中,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%';
要查找包含五个字符的名称
SELECT * FROM pet where name LIKE '_____';
MySQL提供的另一种模式匹配使用扩展的正则表达式
MySQL提供的另一种模式匹配使用扩展的正则表达式。在测试此类型的模式是否匹配时,请使用REGEXP_LIKE()函数(或REGEXP或RLIKE运算符,它们是REGEXP_LIKE()的同义词)。
* . 匹配任何单个字符。
* 字符类 [...] 匹配括号内的任何字符。 例如, [abc] 匹配 a , b 或 c 。 要命名一系列字符,请使用短划线。 [a-z] 匹配任何字母,而 [0-9] 匹配任何个位数。
* * 匹配前面事物的零个或多个实例。 例如, a* 匹配任意数量的 a 字符, [0-9]* 匹配任意数量的数字,并 .* 匹配任意数量的任何数字。
* 如果模式匹配正在测试的值中的任何位置,则正则表达式模式匹配成功。 (这与 LIKE 模式匹配 不同, 模式匹配仅在模式与整个值匹配时才会成功。)
* 要锚定模式以使其必须与要测试的值的开头或结尾匹配,请使用模式 ^ 的开头或 $ 结尾。
要查找 以b开头的名称
mysql>SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b');
要强制将正则表达式比较区分大小写,请使用区分大小写的排序规则,或使用 BINARY 关键字使其中一个字符串成为二进制字符串,或指定 c 匹配控制字符。 这些查询中的b 仅匹配小写 :
SELECT * FROM pet WHERE REGEXP_LIKE(name,'^ b'COLLATE utf8mb4_0900_as_cs);
SELECT * FROM pet WHERE REGEXP_LIKE(name,BINARY'^ b');
SELECT * FROM pet WHERE REGEXP_LIKE(name,'^ b','c');
要查找以fy结尾的名称
mysql>SELECT * FROM pet WHERE REGEXP_LINE(name.'fy$');
要查找包含a的名称
mysql>SELECT * FROM pet WHERE REGEXP_LINE(name.'a');
要查找包含五个字符的名称
mysql>SELECT * FROM pet WHERE REGEXP_LINE(name.'^.....$');
计数行
如果想知道拥有多少只宠物,或者每个所有者拥有多少只宠物,或者您可能进行动物普查操作。COUNT(*)计算行数,因此用于计算动物数量的查询如下所示:
mysql>SELECT COUNT(*) FROM pet;
如果您想知道每个主人有多少宠物,GROUP BY 对每个记录进行分组 owner
mysql>SELECT owner , COUNT(*) FROM pet GROUP BY owner;
动物普查
mysql>SELECT species, COUNT(*) FROM pet GROUP BY species;
性别普查
mysql>SELECT sex, COUNT(*) FROM pet GROUP BY sex;
每种物种和性别组合的动物数量
mysql>SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
对猫和狗进行人口普查
mysql>SELECT species, sex, COUNT(*)
FROM pet
WHERE species = 'dog' OR species = 'cat'
GROUP BY species, sex;
使用多个表
宠物发生的事件event
name date type remark
Fluffy 1995-05-15 litter 4 kittens, 3 female, 1 male
Buffy 1993-06-23 litter 5 puppies, 2 female, 3 male
Buffy 1994-06-19 litter 3 puppies, 3 female
Chirpy 1999-03-21 vet needed beak straightened
Slim 1997-08-03 vet broken rib
Bowser 1991-10-12 kennel
Fang 1991-10-12 kennel
Fang 1998-08-28 birthday Gave him a new chew toy
Claws 1998-03-17 birthday Gave him a new flea collar
mysql>CREATE TABLE event (name VARCHAR(20), date DATE,type VARCHAR(15), remark VARCHAR(255));
mysql>load data local infile 'event.txt' into table event;
mysql>SELECT pet.name , TIMESTAMPDIFF(YEAR,birth,date) AS age , remark
FROM pet INNER JOIN event
ON pet.name = event.name
WHERE event.type = 'litter';
该 FROM 子句连接两个表,因为查询需要从两个表中提取信息。
组合(连接)来自多个表的信息时,需要指定一个表中的记录如何与另一个表中的记录匹配。 这很容易,因为它们都有一个 name 列。 该查询使用一个 ON 子句根据值匹配两个表中的记录 name 。
该查询使用a INNER JOIN 来组合表。 一个 INNER JOIN 或者从表许可证行当且仅当两个表满足所规定的条件,以显示在结果 ON 子句。 在这个例子中, ON 子句指定 name 列中的 pet 表必须的匹配 name 列 event 表。 如果名称出现在一个表中但不出现在另一个表中,则该行不会出现在结果中,因为该 ON 子句中 的条件 失败。
由于 name 列出现在两个表中,因此您必须具体说明引用该列时的表。 这是通过将表名添加到列名称来完成的。
无需具有两个不同的表即可执行联接
如pet之间的交配
mysql>SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
FROM pet AS p1 INNER JOIN pet AS p2
ON p1.species = p2.species
AND p1.sex = 'f'
AND p1.death IS NULLAND p2.sex = 'm'
AND p2.death IS NULL;
获得有关数据库和表的信息
SELECT DATABASE(); //展示目前所选的数据库
SHOW DATABASE(); //列出所有的数据库
DESCRIBE pet; //描述一个表
查询
建立一个商城可能会用到的表
CREATE TABLE shop (
article INT UNSIGNED DEFAULT '0000' NOT NULL,
dealer CHAR(20) DEFAULT '' NOT NULL,
price DECIMAL(16,2) DEFAULT '0.00' NOT NULL,
PRIMARY KEY(article, dealer));
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);
建立表后有以下内容
SELECT * FROM shop ORDER BY article;
SELECT * FROM shop ORDER BY article;
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 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 |
+---------+--------+-------+
最大的项目编号
select max(article)as article from shop;
查找最贵商品的数量,经销商和价格
mysql>SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop);
找到每个编号商品的最高价格。
SELECT article, MAX(price) AS price
FROM shop
GROUP BY article
ORDER BY article;
对于每篇文章,找到价格最贵的经销商或经销商。
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article)
ORDER BY article;
mysql创建和使用数据库的更多相关文章
- MySQL创建和操作数据库表demo
[1]建立员工档案表要求字段:员工员工编号,员工姓名,性别,工资,email,入职时间,部门. [2]合理选择数据类型及字段修饰符,要求有NOT NULL,auto_increment, primar ...
- MySQL创建和修改数据库语法
1.创建数据库语法: CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification [, create_spe ...
- Mysql创建和删除数据库
很久没有使用命令行操作Mysql,百度搜罗,重新整理,加强记忆,便于查询. 以下命令均在win7,64位操作系统下,cmd命令行操作: 一.创建1个Mysql 数据库 方法1:1. cmd下输入:my ...
- mysql创建表和数据库
创建数据库,创建数据库表,例子.MySQL语句 1.创建数据库: 创建的代码:create 数据库的代码:database 数据库表名:随便起,只要自己记住就行.test create ...
- Python MySQL - 创建/查询/删除数据库
#coding=utf-8 import mysql.connector import importlib import sys #连接数据库的信息 mydb = mysql.connector.co ...
- 【学亮IT手记】mysql创建/查看/切换数据库
--创建数据库 create database web_test1 CHARACTER set utf8; --切换数据库 use web_test1; --查看当前使用的数据库 select DAT ...
- 【转载并整理】mysql 创建用户,数据库
http://www.jb51.net/article/31850.htm https://www.cnblogs.com/SQL888/p/5748824.html http://www.cnblo ...
- mysql创建utf-8字符集数据库
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE 的语法:CREA ...
- mysql 创建 mb4 字符集数据库
create database sina default character set utf8mb4 collate utf8mb4_unicode_ci; show variables like ' ...
随机推荐
- 【Azure Developer】使用Postman获取Azure AD中注册应用程序的授权Token,及为Azure REST API设置Authorization
Azure Active Directory (Azure AD) is Microsoft's cloud-based identity and access management service, ...
- Payment Spring Boot 1.0.4.RELEASE 发布,最易用的微信支付 V3 实现
Payment Spring Boot 是微信支付V3的Java实现,仅仅依赖Spring内置的一些类库.配置简单方便,可以让开发者快速为Spring Boot应用接入微信支付. 欢迎ISSUE,欢迎 ...
- Java反射全解析(使用、原理、问题、在Android中的应用)
前言 今天说Java模块内容:反射. 反射介绍 正常情况下,我们知晓我们要操作的类和对象是什么,可以直接操作这些对象中的变量和方法,比如一个User类: User user=new User(); u ...
- CTFshow萌新赛-web签到
打开靶机 查看页面信息 可以看到有一个system函数 在Linux中可以使用":"隔离不同的语句 payload如下 https://5105c8b6-83aa-4993-91b ...
- SW3518中文规格书
SW3518 是一款高集成度的多快充协议双口充电芯片, 支持 A+C 口任意口快充输出, 支持双口独立限流. 其集成了 5A 高效率同步降压变换器, 支持 PPS/PD/QC/AFC/FCP/SCP/ ...
- JAVA获取当前文件路径this.getClass().getResource方法详细讲解
public class Test { public void run() { // TODO Auto-generated method stub System.out.println(" ...
- 1、kubernetes简介
Kubernetes简介 文档信息 中文官网:https://kubernetes.io/zh 中文社区:https://www.kubernetes.org.cn/ Kubernetes是容器集群管 ...
- python的Counter类
python的Counter类 Counter 集成于 dict 类,因此也可以使用字典的方法,此类返回一个以元素为 key .元素个数为 value 的 Counter 对象集合 from coll ...
- 电脑微信电脑PC 多开/防撤回 补丁
简介 经常使用微信电脑版的用户都会发现一个蛋疼的事情,那就是微信PC版不支持多开,也就是不能同时登陆多个账号,这对于需要在电脑上登陆多个微信账号的朋友来说肯定是极其的不方便.另外有的时候别人撤回了一些 ...
- E2.在shell中正确退出当前表达式
E2.在shell中正确退出当前表达式 优雅退出当前表达式 在shell里面输出复杂的多行表达时,经常由于少输入一个引号,一直无法退出当前的表达式求值,也没有办法终止它,以前只能通过两次Ctrl+C结 ...