MySQL的存储引擎与表的创建,键的定义,等等

本文记录了MySQL实战练习,包括查询操作、表结构创建、存储引擎设置及表间关系定义等内容。
1
2
3
4
5
--select * from products
--select prod_name from products
/*limit 7 offset 2 */
--从第二行往下取7行数据,若不足7行,则取实际包含的行数 
--limit 2,7--等同

手抖把寨板弄翻过来了,吓得笔记本硬盘脱机,重启后只剩下上面这点练习了,下面是今天练习Mysql关于表的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
select from orders
order by 2,3
show engines
show variables like '%innodb%'
show variables like '%storage_engine%' --查看mysql当前默认的存储引擎:
show table status from test where name ='test'--查看test库的test表的存储引擎信息
----创建表,并指定其存储引擎为Innodb
USE TEST
create table test_engine (id int not null auto_increment,
 temp varchar(10),--varchar类型需要指定长度,否则会报错无法创建表
 primary key (id)
 ) engine = innodb
--更改表的存储引擎
alter table engine= myisam--报错,不知道为何
--小练习1
create table example0(id int not null auto_increment primary key,
  name varchar(20),
  sex  boolean           --等同与tinyint(1)
  )
--小练习2--组合主键
use test
create table sc(sNo int not null,
cNo int not null,
/*突然想起了select from table的问题了,试验一下
use world;
select from world.city --结果为选出一列n行的2,n为city表的行数
*/
grade int default '0',--不能少逗号,即使下面没有属性声明只有主键定义。。。
primary key (sNo,cNo)
)
use test;
create table sc(sNo int ,--这里之前有not null 然后创建的时候就一直出错
cNo int ,--同上(上面一个例子是不是也是这个原因?不明白为啥,实验一下)
grade int default '0',
primary key (sNo,cNo)
)
create table example1(id int not null auto_increment primary key,
  name varchar(20),--果然不加(20)就会报错,为什么?
  sex  boolean
  )
/*子表的外键必须是父表的主键,且数据类型需一致*/
create table example3(id int primary key,
 stu_id int,
 course_id int,
 constraint c_fk foreign key(stu_id,course_id) references example2(stu_id,course_id) --报错,无法创建example3表。查询书籍,可能是被依赖的example2表及其属性不存在
 --先回来创建表example2
 )
create table example2(stu_id int,
  course_id int,
  grade float,
  primary key(stu_id,course_id)
 )
create table example3(id int primary key,
 stu_id int,
 course_id int,
 constraint c_fk foreign key(stu_id,course_id) references example2(stu_id,course_id) 
 --Command(s) completed successfully.
/*字段唯一性约束,字段自增属性,字段默认值(之前的例子中,int默认值0不加‘’报错,再预先实验一下)*/
 --把小练习2复制过来,以后的例子都要编号,方便调用。。。
  create table sc1(sNo int not null,
cNo int not null,
grade int default 0,
primary key (sNo,cNo))--Command(s) completed successfully.看来是我自己弄错了
  --小练习3
 create table example7(id int primary key auto_increment,
   stu_id int unique,
   name varchar(20) not null,
   English varchar(20) default 'zero',
   Math float default 0,
   Computer Float default 0
   --Command(s) completed successfully.关于表的练习结束

    

 

   

  本文转自 angry_frog 51CTO博客,原文链接:http://blog.51cto.com/l0vesql/1771020



### 启动 MySQL 服务 为了启动 MySQL 服务,可以根据操作系统采取不同的方法。如果是在 Windows 上安装了 MySQL,则可以通过以下方式之一来启动服务: - **通过命令行**:打开命令提示符窗口并输入 `net start mysql` 来手动启动 MySQL 服务[^4]。 对于 Linux 或 macOS 用户来说,通常会使用如下命令来管理 MySQL 的运行状态: ```bash sudo systemctl start mysql ``` 或者如果是基于旧版 init.d 脚本的话则应执行下面这句指令: ```bash sudo service mysql start ``` 一旦确认 MySQL 已经成功开启之后就可以继续下一步骤。 --- ### 创建新的数据库结构设计 当 MySQL 正常工作以后就需要定义存储数据的地方——即建立一个新的逻辑容器也就是我们所说的 “Database”。以下是具体实现过程中的 SQL 命令实例说明: #### 定义编码格式创建 Database 推荐设置成支持更广泛字符集的 UTF-8 编码形式以适应国际化需求场景下的应用开发要求。例如要新建名为 `mydatabase` 并采用 utf8mb4 字符集及其对应排序规则 collation 可参考此语句完成操作: ```sql CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 上述代码片段中指定了所使用的字符集合以及比较顺序模式从而确保能够正确处理多语言文字信息而不丢失精度等问题发生[^3]。 接着切换到刚生成好的 database 下面准备进一步构建实体关系模型之前先得进入目标 space 中去: ```sql USE mydatabase; ``` #### 构建 Table 结构体 假设现在有一个简单的例子用来记录学生基本信息包括姓名年龄性别等字段属性那么可以用这样的语法达出来: ```sql CREATE TABLE students ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL DEFAULT '', age TINYINT UNSIGNED CHECK (age >= 0 AND age <= 120), gender ENUM('male', 'female') DEFAULT 'male' ); ``` 在这里需要注意的是每列的数据类型长度约束条件还有初始值设定等方面的内容均需按照实际业务逻辑来进行调整优化[^2]。 另外由于 MySQL 支持多种 Storage Engine 所以还可以额外增加 ENGINE 参数选项来自定义底层物理文件组织方式比如 InnoDB 是目前最常用的一种事务安全型引擎而 MyISAM 则是非事务性的速度较快适用于只读查询密集的应用场合等等具体情况视项目特点决定即可。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值