关系型数据库基础
UNIX 系统中连接数据库并执行 SQL 脚本
# mysql -u root -p # 以 root 用户登录 MySQL,系统会提示输入密码
# source FileName.sql # 在 MySQL 交互式界面中执行指定的 SQL 文件建立数据库
create database db_name;db_name:数据库名
数据库名称区分大小写,长度最长为 64 个字符,别名长度最长为 256 个字符,不能使用数据库关键字。
数据库重命名
rename database old_name to new_name;old_name:旧数据库名new_name:新数据库名
查看数据库
show databases;进入数据库
db_name:数据库名
删除数据库
db_name:数据库名
更改数据库字符集
SQL 数据类型
tinyint(1B),smallint(2B),mediumint(3B),int(4B),bigint(8B)float(4B),double(8B),decimal(整体位数,小数点后位数)char是字符类型,想存字符串用char(字符数)unsigned + 数据类型可以设置为无符号的数据类型。
建立表
table_name:表名column_name:列名data_type:数据类型
表重命名
old_name:旧表名new_name:新表名
查看数据库有哪些表
展示表结构
显示表全部信息(select 后面细说)
SQL 语法:注释
在脚本中添加注释或许是一种良好习惯,可以避免在一段时间后难以理解代码的用途。
思考题
如果代码注释仅仅起到助记作用,那么任何注释都不属于代码本身。除非已经失去了再次编写相同代码的能力,否则也没有必要刻意去理解之前编写的代码。
请读者思考代码注释的真正意义。
主键、唯一约束、非空约束与自动编号
信息写入表
col1:列名 1col2:列名 2
表新增列
new_col:新列名data_type:数据类型
表删除列
表修改列数据类型
new_data_type:新数据类型
表添加主键
col_name:作为主键的列名(通常为已存在的列)
表删除主键
唯一性约束
表添加唯一性约束
constraint_name:唯一约束名col_name:列名
表删除唯一性约束
外键
表添加外键
fk_column_name:外键名fk_column:子表中的外键列名
表删除外键
table_name:子表名fk_name:外键名
外键的概念
父表:外键引用的表。父表中的被引用列通常是主键(PRIMARY KEY)或唯一键(UNIQUE)。例如上文示例中的父表。
子表:包含外键的表。子表中的外键列指向父表中的主键或唯一键。例如上文示例中的子表。
删除父表数据时失败
原因:子表中存在引用该数据的记录。
解决:使用
ON DELETE CASCADE或先删除子表中的记录。ON DELETE CASCADE涉及较多内容,此处暂不展开,详见后文“自动维护父表和子表之间的参照完整性”一节。
下面是一个父、子表格和外键的示例
创建父表 customers: 包含列: id:主键,用于唯一标识客户。 name:客户姓名。 email:唯一约束,用于防止重复的电子邮件地址。
创建子表 orders: order_id:主键,用于唯一标识订单。 order_date:记录订单日期。 customer_id:外键列,用于关联客户。 amount:订单金额。
设置外键:
FOREIGN KEY (customer_id) REFERENCES customers(id)表示子表的 customer_id 列引用父表的 id 列。ON DELETE CASCADE删除父表记录时,子表中引用该记录的行也会被删除。ON UPDATE CASCADE更新父表主键时,子表外键列会自动更新。
修改列的数据类型
修改表信息、删除行
注:set 子句用于指定需要修改的列。如果只希望修改部分记录,需要通过 where 子句限定条件,以明确修改的范围。
下面给几个示例:
通俗解释:将表 book_table 中 Publisher 值为 "人民邮电出版社" 的记录,其 Price 值统一乘以 1.2,即在原价基础上增加 20%。
WHERE 子句
如果
Price值小于 50,就...如果
author值是王阳或者刘天洋,就...如果
name值是张三或者李四,就...WHERE 子句用于接收条件表达式,该表达式会计算并返回一个布尔值。
这里就需要一个知识:SQL 运算符
算术运算符
+加法运算符-减法运算符*乘法运算符/除法运算符%取模运算符
比较运算符
=等于(在 SQL 中用于比较,而非赋值)!=不等于<小于>大于<=小于等于>=大于等于<=>NULL 安全等于,NULL <=> NULL,返回结果是 TRUE
逻辑运算符
and两条件都为真才返回真,否则为假or两条件有一个为真就是真,全是假才为假not反转真假xor仅一个条件为真才返回真,否则返回假。
特殊运算符
in:“值在列表中”运算符,用于筛选符合条件的记录,并返回布尔结果,供 update 或 delete 语句使用。例如5 in (1, 3, 5)返回真。between范围匹配:例如5 between 1 and 10返回真。like模式匹配:'abc' like 'a%'返回真。百分号在这里类似 sh 的通配符。IS NULL”判断表项是否为 NULL“:NULL IS NULL返回 TRUE。 例子:查看书名有没有叫《xxx 设计 xxx》的
在一个书籍管理库中会返回类似《mysql 数据库设计》的书名。
通过上述说明,可以更好地理解 WHERE 子句中条件表达式的含义。
自动维护父表和子表之间的参照完整性
CASCADE 级联操作:父表记录删除/更新时,子表中相关记录也被删除/更新。
SET NULL 将子表中的外键列设置为 NULL(要求外键列允许 NULL)。
RESTRICT 拒绝操作:不允许删除/更新父表中被引用的记录(立即返回错误)。
NO ACTION 类似 RESTRICT,但延迟到事务结束时才检查完整性。
SET DEFAULT 设置为默认值,MySQL 不支持。
SELECT 语句
SELECT 关键字后指定要查询的列名,使用 * 表示选择所有列。
用于显示 student_table 中年龄等于该表最大年龄值的记录。
升序输出和降序输出
ASC 升序,DESC 降序。
LIMIT a, b 用于限制查询结果的数量,其中 a 表示起始位置(从 0 开始),b 表示返回的记录条数。
怎么将别的表给带上(连接查询)
显式连接
name 取自 stu_table
score 取自 score_table
隐式连接
虽然隐式连接语法较为简洁,但在实际开发中更推荐使用显式连接,以提高可读性和可维护性。
最后更新于
这有帮助吗?