Mysql-basic-1

来源:互联网 发布:冉莹颖的实际身高知乎 编辑:程序博客网 时间:2024/05/18 15:04

数据库:数据库是以一定组织方式储存在一起的,能为多个用户共享的,具有尽可能小的冗余度的、与应用彼此独立的相互关联的数据集合。
Mysql:开源关系型数据库,LAMP组合成员
连接到MySQL服务器:>mysql -uroot -proot [-h127.0.0.1]
Mysql构成
Mysql常用命令

显示MySQL中所有的数据库> show databases;切换到mydb数据库> use mydb;查看数据库中所有的表> show tables;查看表结构> desc t_user;查看数据库版本和时间> select version(),now();创建数据库>create database mydb;**```创建表:**`>create table t_student (stuname varchar(20),stuage int,stuaddress varchar(100));`插入数据:> `insert into t_student(stuname,stuage,stuaddress)values('tom',23,'郑州');`查询表中数据:>select * from t_student;**声明主键:**在设计表时总是要定义表的主键• 表的主键设计策略• 任意两行都不具备相同的主键值• 每行都必须具有一个主键值(主键不允许Null列)• 主键和业务无关,不更改,不重用• 主键可以是一个列或者是多个列的组合• 使用PRIMARY KEY(XXX)来声明一个主键列• 如果使用多个列作为主键则需要如下声明:PRIMARY KEY(XXX,XXX)**创建表时添加主键**:

create table t_student (
id int,
stuname varchar(20),
stuage int,
stuaddress varchar(100),
primary key(id)
);

**主键自动增长**:`AUTO_INCREMENT• 用来标示一个自动增长列• 一个表中只允许有一个自动增长列>create table t_student (id int auto_increment,…);`**删除表**:`> drop table t_student;`**非null约束**:`stuname varchar(20) not null`**默认约束**:`stuaddress varchar(100) default '郑州'`**唯一约束**:`stuname varchar(20) not null unique`**更改表**:

添加一列

alter table t_student add tel char(20);
删除一列
alter table t_student drop column tel;
添加唯一约束
alter table t_student add constraint uk_username unique(usercode);
添加主键约束
alter table t_user add constraint pk_t_user_id primary key t_user(id);
添加默认约束
alter table t_user alter password set default ‘123456’;
添加非null约束
alter table t_teacher modify column uname varchar(20) not null;

**重命名表**:`>rename table t_student to t_stu`**导出数据库**:`>mysqldump -hlocalhost -uroot -proot mydb>C:/a.sql`**批量导入SQL脚本**:`source C:/a.sql`**运算符**:`逻辑运算符• = 等于• <>,!= 不等于• < 小于• > 大于• <= 小于等于• >= 大于等于• between 在指定的两个值之间关系运算符• andornot`**update语句**:`>update t_student set stuname = 'Alex',age = '26' where id = 1;`**where语句**:`• where stuname = 'tom'• where stuname = 'tom' or stuname = 'alex'• where id > 1 and id < 3where id != 23where id = 12 or id = 34where id in (12,34)• where id between 12 and 34where password is null• where password is not null`**delete语句**:`>delete from t_student where id = 1;`**truncate**:>`truncate table t_student;`TRUNCATE TABLE用于删除表中的所有记录,但该语句不能包含WHERE语句,该操作运行速度比DELETE语句快**表设计三大范式**:*1. 确保每列的原子性2. 在第一范式的基础上,确保每列都和主键相关3. 在第二范式的基础上,确保每列都和主键直接相关,而不是间接相关***基本查询**:

查询所有的列

SELECT * FROM vendors;
查询指定的列
SELECT vend_id,vend_name,vend_address,vend_city FROM vendors;
如果查询时需要显示表中的所有列,尽量避免使用通配符(*),而要采用写出所有列名的方式进行查询,
因为采用通配符查询会降低程序的查询性能。
去除重复记录
SELECT DISTINCT vend_id FROM products;
分页
SELECT * FROM products LIMIT 5;
SELECT * FROM products LIMIT 0,5;
SELECT * FROM products LIMIT 5,5;
排序(降序)
SELECT * FROM products ORDER BY prod_price DESC;
排序(升序)
SELECT * FROM products ORDER BY prod_price [ASC];
多列排序
SELECT * FROM products ORDER BY prod_price ASC,prod_name ASC;

**过滤查询**

查询产品价格在2到10之间的产品

SELECT * FROM products WHERE prod_price >= 2 AND prod_price <= 10;
SELECT * FROM products WHERE prod_price BETWEEN 2 AND 10;
查询产品价格不等于2.5的所有产品
SELECT * FROM products WHERE prod_price <> 2.5;
SELECT * FROM products WHERE prod_price != 2.5;
查询没有电子邮件信息的客户
SELECT * FROM customers WHERE cust_email IS NULL;
查询有电子邮件信息的客户
SELECT * FROM customers WHERE cust_email IS NOT NULL;
查询由供应商1001和1003制造并且价格在10元以上的产品
SELECT * FROM products WHERE vend_id = ‘1001’ OR vend_id = ‘1003’ AND prod_price > 10;
SELECT * FROM products WHERE (vend_id = ‘1001’ OR vend_id = ‘1003’) AND prod_price > 10;
SELECT * FROM products WHERE vend_id IN(‘1001’,’1003’) AND prod_price > 10;
查询不是由供应商1001和1003制造的产品
SELECT * FROM products WHERE vend_id NOT IN(‘1001’,‘1003’) ;

**模糊查询**:`“ _”通配符代表一个字符“ %” 通配符代表0个或一个或任意多个字符查询产品名称中以jet开头的产品> SELECT * FROM products WHERE prod_name LIKE 'jet%';查询_ ton anvil产品> SELECT * FROM products WHERE prod_name LIKE '_ ton anvil'• 不要过度使用LIKE通配符,如果其他操作符可以完成就使用其他操作符• 通配符搜索使用的时间比其他搜索的时间长• 如果确实需要使用通配符,除非绝对有必要,否则不要把通配符放到WHERE子句的开始处,把通配符放到搜索模式的开始处,搜索起来是最慢的列的别名> SELECT vend_id AS '供应商编号' FROM products;算数运算>SELECT quantity,item_price,quantity * item_price AS '总价' FROM orderitems;`**文本处理函数:**

left()返回左边指定长度的字符

SELECT prod_name,LEFT(prod_name,2) FROM products;
right()返回右边指定长度的字符
SELECT prod_name,RIGHT(prod_name,5) FROM products;
length()返回字符串的长度
SELECT prod_name,LENGTH(prod_name) FROM products;
lower()将字符串转换为小写
SELECT prod_name,LOWER(prod_name) FROM products;
upper()将字符串转换为大写
SELECT prod_name,UPPER(prod_name) FROM products;
ltrim()去掉字符串左边的空格
SELECT prod_name,LTRIM(prod_name) FROM products;
rtrim()去掉串右边的空格
SELECT prod_name,RTRIM(prod_name) FROM products;
trim()去掉左右两边的空格
SELECT prod_name,TRIM(prod_name) FROM products;
字符串连接
SELECT CONCAT(‘I love ‘,cust_name) AS ‘Message’ FROM customers;
“`
时间日期函数:
这里写图片描述

聚合函数
`• min()
• max()
• count()
• sum()
• avg()
聚合函数常用于统计数据使用
聚合函数统计时忽略值为NULL的记录
查询商品价格最高的产品

SELECT MAX(prod_price) FROM products;
查询商品价格最低的产品
SELECT MIN(prod_price) FROM products;
查询商品价格总和
SELECT SUM(prod_price) FROM products;
查询商品平均价格
SELECT AVG(prod_price) FROM products;
查询客户数量
SELECT COUNT(*) FROM customers;
SELECT COUNT(cust_email) FROM customers;
获取每个供应商提供的产品数量
SELECT vend_id,COUNT(*) FROM products GROUP BY vend_id;
获取提供产品数量大于2的供应商
SELECT vend_id,COUNT() FROM products GROUP BY vend_id HAVING COUNT() > 2;
HAVING语句用于GROUP BY的过滤
WHERE用于分组前过滤
获取产品提供产品数量大于等于2并产品价格大于10的供应商
SELECT vend_id,COUNT(*) FROM products WHERE prod_price > 10 GROUP BY vend_id HAVING
COUNT(*) >= 2;

**查询语句顺序**:
1. SELECT
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
7. LIMIT`

0 0
原创粉丝点击