前期准备:
- 这将创建一个名为 my_database 的数据库。
CREATE DATABASE my_database;
查询所有数据库:
SHOW DATABASES;
创建表:
#在创建表之前,确保使用 USE 命令选择要操作的数据库:
USE my_database;
使用 CREATE TABLE
命令创建一个新的表。表需要指定表名和列定义:
CREATE TABLE user (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
# 这将创建一个名为 user 的表,包含 id、username、email 和 created_at 四个列。
SHOW TABLES;
使用以下命令显示数据库中的所有表:
一、复制
把user表的数据复制到新表user_copy
1.复制表和数据(有字段,有数据,无索引等)
CREATE TABLE user_copy as SELECT * FROM `user`
把select查询语句的结果建一个新表
2.复制表 (只有字段,无数据,无索引等)
CREATE TABLE `user_copy` as SELECT * FROM user WHERE 1=2
3.复制表结构(可以复制旧表的主键、索引、Extra(auto_increment,字符集编码及排序)、注释、分区等属性。但是不包含触发器、外键等)
CREATE TABLE user_copy LIKE `user`
复制完整结构和数据
CREATE table user_copy LIKE `user`; INSERT INTO user_copy SELECT * FROM `user`
二、查询
查询语句一般不区分大小写
select:查询语句关键字,必须写
* 表示查询表里所有字段,或者写字段名如 id等
from:关键字,从哪个表里查询数据如`user`,也可以不带 `
user:被查询等表
where:关键字,后面接查询等条件(等式、不等式等)
1.条件查询(where)
SELECT * FROM `user` WHERE id =1
id 等于1
还有其他比较运算符:比如 =、!=、>、<、>=、<= 等。
2.模糊查询(like)
SELECT * FROM `user` WHERE name like '12%'
name 以12开头(12,12aaa,12-asdf,12@,12·,121212等)
其他还有: LIKE、NOT LIKE、IN、NOT IN 等。
3.范围查询(BETWEEN)
SELECT * FROM `user` WHERE id BETWEEN 1 and 123
id 在1和123之间,包括1和123
其他还有:NOT BETWEEN
4.正则查询(REGEXP)
SELECT * FROM `user` WHERE id REGEXP '^1'
REGEXP后接正则表达式(一种语法)
其他还有:NOT REGEXP
5.空值查询(NULL)
```SELECT * FROM user
WHERE id is NULL``
NULL 表示空,没有任何数据,不是字符串‘NULL’
其他还有:IS NOT NULL。
三、约束
1.非空约束
alter table `user` MODIFY phone int not null # 设置'phone'为非空
alter table `user` MODIFY phone int null # 设置'phone'为空
2.唯一约束
alter table `user` add UNIQUE (phone) # 设置'phone'为唯一索引
ALTER TABLE `user` DROP INDEX phone # 删除唯一索引
3.主键约束
ALTER TABLE `user`
DROP PRIMARY KEY, # 删除主键索引
ADD PRIMARY KEY (`user_id`) USING BTREE; 添加
四、其他
SQL 约束(Constraints)
SQL 约束用于规定表中的数据规则。
如果存在违反约束的数据行为,行为会被约束终止。
约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
DROP INDEX 语句
DROP INDEX 语句用于删除表中的索引。
ALTER TABLE 语句
ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
注意:以上的 size 代表的并不是存储在数据库中的具体的长度,如 int(4) 并不是只能存储4个长度的数字。
实际上int(size)所占多少存储空间并无任何关系。int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。就是在显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。
例如:
int的值为10 (指定zerofill)
int(9)显示结果为000000010
int(3)显示结果为010
就是显示的长度不一样而已 都是占用四个字节的空间
SQL Aggregate 函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值
有用的 Aggregate 函数:
AVG() - 返回平均值
COUNT() - 返回行数
FIRST() - 返回第一个记录的值
LAST() - 返回最后一个记录的值
MAX() - 返回最大值
MIN() - 返回最小值
SUM() - 返回总和
SQL Scalar 函数
SQL Scalar 函数基于输入值,返回一个单一的值
有用的 Scalar 函数:
UCASE() - 将某个字段转换为大写
LCASE() - 将某个字段转换为小写
MID() - 从某个文本字段提取字符,MySql 中使用
SubString(字段,1,end) - 从某个文本字段提取字符
LEN() - 返回某个文本字段的长度
ROUND() - 对某个数值字段进行指定小数位数的四舍五入
NOW() - 返回当前的系统日期和时间
FORMAT() - 格式化某个字段的显示方式
在 where like 的条件查询中,SQL 提供了四种匹配方式:
%:表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。
[]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
[^] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
查询内容包含通配符时,由于通配符的缘故,导致我们查询特殊字符 “%”、“_”、“[” 的语句无法正常实现,而把特殊字符用 “[ ]” 括起便可正常查询。