您的位置:首页 > 数据库 > MySQL

Mysql-basic-1

2016-07-12 00:29 507 查看
数据库:数据库是以一定组织方式储存在一起的,能为多个用户共享的,具有尽可能小的冗余度的、与应用彼此独立的相互关联的数据集合。

Mysql:开源关系型数据库,LAMP组合成员

连接到MySQL服务器:
>mysql -uroot -proot [-h127.0.0.1]




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 在指定的两个值之间
关系运算符
• and
• or
• not`
**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 < 3
• where id != 23
• where id = 12 or id = 34
• where id in (12,34)
• where id between 12 and 34
• where 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`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: