数据类型
- *整数类型*(Integer Types):
- TINYINT:范围为-128到127或0到255(无符号),用于存储较小的整数值,如存储性别或状态信息。
- SMALLINT:范围为-32768到32767或0到65535(无符号),用于存储较小的整数值,如存储年龄或计数值。
- MEDIUMINT:范围为-8388608到8388607或0到16777215(无符号),适用于中等大小的整数值存储。
- INT:范围为-2147483648到2147483647或0到4294967295(无符号),适用于一般整数值存储。
- BIGINT:范围为-9223372036854775808到9223372036854775807或0到18446744073709551615(无符号),用于存储大整数值,如存储ID或计数值。
- *浮点数类型*(Floating-Point Types):
- FLOAT:用于存储单精度浮点数,约占用4个字节的空间。
- DOUBLE:用于存储双精度浮点数,约占用8个字节的空间。
- DECIMAL:用于精确的十进制数值存储,适用于货币或其他需要精确计算的场景。
- *日期与时间类型*(Date and Time Types):
- DATE:用于存储日期,格式为’YYYY-MM-DD’,如’2023-11-13’。
- TIME:用于存储时间,格式为’HH:MM:SS’,如’12:30:00’。
- DATETIME:用于存储日期和时间,格式为’YYYY-MM-DD HH:MM:SS’,如’2023-11-13 12:30:00’。
- *字符串类型*(String Types):
- CHAR:用于存储固定长度的字符串,如CHAR(10)可以存储长度为10的字符串。
- VARCHAR:用于存储可变长度的字符串,如VARCHAR(255)可以存储长度最大为255的字符串。
- TEXT:用于存储较长的文本数据,例如文章内容或备注信息。
- *枚举和集合类型*:
- 枚举(ENUM)类型: 枚举类型允许您从一组预定义的选项中选择一个单独的值。在创建表结构时,你可以指定枚举类型的字段允许的值列表
- 集合(SET)类型: 集合类型允许您从一组预定义的选项中选择多个值,这些值之间使用逗号分隔。与枚举类型不同,集合类型允许您选择多个选项,而不仅限于一项。
- *其他类型*:
- BOOLEAN:在MySQL中没有专门的BOOLEAN类型,通常使用TINYINT(1)来表示布尔值,0表示false,1表示true。
存储引擎
MEMORY、MyISAM、InnoDB、ARCHIVE
-- 查看数据库的引擎
SHOW ENGINES
-- 查看默认的存储引擎
show variables like '%storage_engine%'
-- 更改默认引擎
SET DEFAULT_STORAGE_ENGINE=MyISAM;
-- 查看该数据库下所有表的引擎
show table status;
-- 查看某个表的引擎!
show create table altertable;
-- 更改表的引擎
ALTER TABLE 表名 ENGINE = 存储引擎名称;
创建数据库
CREATE DATABASE mydatabase
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
CREATE DATABASE IF NOT EXISTS mydatabase;
删除数据库
DROP DATABASE <database_name>; -- 直接删除数据库,不检查是否存在
或
DROP DATABASE [IF EXISTS] <database_name>
选择数据库
USE database_name;
创建数据表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
birthdate DATE,
is_active BOOLEAN DEFAULT TRUE
);
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8mb4_general_ci;;
约束
主键约束
添加单列主键
create table emp1(
eid int primary key, --创建主键
name varchar(20),
deptId int,
salary double
)
添加多列联合主键
-- 联合主键
-- 所谓的联合主键,就是这个主键是由一张表中的多个字段组成的
-- primary key(字段1,字段3,字段n)
create table emp3(
name varchar(20),
deptId int,
salary double,
primary key(name,deptId)
);
自增长约束
特点
1.默认情况下,auto_increment的初始值是1,每新增一条记录,字段值都自动加1
2.一个表中只能有一个字段使用auto_increment约束,且该字段必须有唯一索引,以避免序号重复
3.auto_increment约束的字段必须具备NOT NULL 属性
4.auto_increment约束的字段只能是整数型
5.auto_increment约束字段的最大值受该字段的数据类型约束,如果达到上限,auto_incremnt就会失效
添加自增长约束
create table emp1(
eid int primary key auto_increment,
name varchar(20)
);
指定自增长字段的初始值
-- 自增长约束
-- 方式一:创建表时指定 指定eid从100开始增长
create table emp1(
eid int primary key auto_increment,
name varchar(20)
)auto_increment = 100;
-- 方式二:创建表之后指定
alter table emp1 auto_increment =200;
非空约束
添非空约束加
-- 方式1:创建表时指定
create table user (
id int,
name varchar(20) not null
);
-- 方式2:创建表之后指定
alter table user modify name varchar(20) not null;
唯一约束
-- 方式一:创建表时指定
create table user(
id int,
name varchar(20) unique -- 指定唯一约束
)
-- 方式二:创建表之后指定
alter table user add constraint unique_name unique(name);
默认约束
-- 方式一:创建表时指定
create table user(
id int,
address varchar(20) default '北京' -- 指定默认约束
);
-- 方式二:创建表之后指定
alter table user modify address varchar(20) default '天津';
外键约束
-- 方式一:创建表时穿件外键约束
create table if not exists emp(
eid varchar(20) primary key,
ename varchar(20),
age int,
dept_id varchar(20),
constraint emp_fk foreign key (dept_id) references dept (deptno) -- 外键约束
)
-- 方式二:添加外键约束
alter table emp2 add constraint dept_id_fk foreign key (dept_id)references dept2(deptno);
CHECK约束
CREATE TABLE IF NOT EXISTS tb_student (
studentNo INT ( 10 ) ,
studentName VARCHAR ( 20 ) ,
sex CHAR ( 2 ) CHECK ( sex='男' OR sex='女' ),
birthday date,
native VARCHAR ( 20 ),
nation VARCHAR ( 10 ) ,
classNo CHAR ( 6 )
) ;
零填充约束
插入数据时,当该字段的值长度小于定义的长度时,会在该值前面补上相应的0
create table user(
id int zerofill, -- 添加零填充约束
name varchar(20)
);
insert语句
INSERT INTO users (username, email, birthdate, is_active)
VALUES
('test1', 'test1@runoob.com', '1985-07-10', true),
('test2', 'test2@runoob.com', '1988-11-25', false),
('test3', 'test3@runoob.com', '1993-05-03', true);
select语句
-- 选择所有列的所有行
SELECT * FROM users;
-- 选择特定列的所有行
SELECT username, email FROM users;
-- 添加 WHERE 子句,选择满足条件的行
SELECT * FROM users WHERE is_active = TRUE;
-- 添加 ORDER BY 子句,按照某列的升序排序
SELECT * FROM users ORDER BY birthdate;
-- 添加 ORDER BY 子句,按照某列的降序排序
SELECT * FROM users ORDER BY birthdate DESC;
-- 添加 LIMIT 子句,限制返回的行数
SELECT * FROM users LIMIT 10;
update语句
UPDATE orders
SET status = 'Shipped', ship_date = '2023-03-01'
WHERE order_id = 1001;
delete语句
DELETE FROM students
WHERE graduation_year = 2021;
alter语句
查看表结构
show columns from testalter;
删除/添加/修改字段名
-- 删除字段
alter table testalter drop i;
-- 新增字段
alter table testalter add i int
-- 添加到第一列
alter table testalter add i int first;
-- 添加到某一字段后面!
alter table testalter add x int i;
修改字段类型及名称
-- 修改字段类型
alter table testalter modify i bigint;
-- 修改字段名及类型
alter table testalter change i j varchar(1);
修改null值和默认值
-- 我们可以通过alter modify 修改字段是否为null或者默认值!
alter table testalter modify c varchar(100) not null default "未知";
修改表名
-- 修改表名
alter table testalter rename to altertable;
修改table存储引擎
-- 修改数据库表存储引擎
alter table altertable engine = myisam;
-- 查看该数据库下所有表的引擎
show table status;
-- 查看某个表的引擎!
show create table altertable;
修改主键/外键约束
-- 添加主键
alter table tab_name add primary key(field);
-- 修改主键
alter table tab_name modify field int primary key;
-- 删除名为pk_name主键!
alter table tab_name drop primary key pk_name;
-- 删除外键约束
alter table tab_name drop foregin key fk_name;
-- 添加外键约束 给field 字段设置为外键 关联 x表的i主键 约束名为 fk_name
alter table tab_name add constraint fk_name foregin key(field) references x(i);
修改字段相对位置
-- 修改字段相对位置
alter table altertable modify x int(11) first/ after j;
设置字段default/uique
-- 设置默认值
alter table tab_name field set default '默认值';
-- 删除默认值
alter table tab_name field drop default;
-- 设置唯一约束
alter table tab_name add constraint uq_name unique(field);
-- 删除唯一约束
alter table tab_name drop index uq_name;