javaweb实训第四天上午——MySQL基础(2)https://developer.aliyun.com/article/1414839
4.3 表的操作
4.3.1 创建表
语法:
先进入某一个数据库: use database_name;
输入建表的SQL命令:{dos 图形化界面写命令} [ 图形化界面创建 ]
CREATE TABLE 表名(
列名1 列的类型 [约束],
列名2 列的类型 [约束],
…
列名N 列的类型 约束
);
注意:最后一行没有逗号
注意:不能使用MySQL中的关键字作为标识符.
比如:订单表(order),但是ORDER是SQL中排序的关键字.
解决方案:
方式1:使用反引号,把关键字引起来:ORDER.
方式2:开发中,习惯t_表名;
需求:
在jdbcdemo数据库中,创建表student,用来存储学生的编号,名字,年龄.
USE jdbcdemo; CREATE TABLE `student` ( `id` bigint(20) PRIMARY KEY AUTO_INCREMENT, `name` varchar(20) NOT NULL, `age` int(11) SHOW TABLES; 查看数据库中存在哪些表: DESC table_name; 查看表结构: SHOW CREATE TABLE table_name; 查看表的详细定义(定义表的SQL语句) DROP TABLE table_name; 删除表: ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
讨论&思考:
为什么字符串要设定这个长度呢?
因为数据库中针对可变数据的存储需要压缩,而不可变数据的存储不需要压缩
4.3.2 查看表结构和删除表
show databases; 查看有哪些数据库 use 数据库名称; 切换数据库 SHOW TABLES; 查看数据库中存在哪些表: DESC table_name; 查看表结构: description 描述 SHOW CREATE TABLE table_name; 查看表的详细定义(定义表的SQL语句)ddl DROP TABLE table_name; 删除表:
4.3.3 表的约束
表的约束(针对于某一列):
1.非空约束(NK):NOT NULL,不允许某列的内容为空。
2.设置列的默认值:DEFAULT。
3.唯一约束(UK):UNIQUE,在该表中,该列的内容必须唯一。
4.主键约束:PRIMARY KEY, 非空且唯一。
5.主键自增长:AUTO_INCREMENT,从1开始,步长为1。
6.外键约束:FOREIGN KEY,A表中的外键列.A表中的外键列的值必须参照于B表中的某一列(B表主键)。
外键存储的是另外一张表的主键
主键设计: 学生表 姓名 年龄 身份证 电话
1:单列主键,单列作为主键,建议使用。
== 复合主键==,使用多列充当主键,不建议。
2:主键分为两种:
① 自然主键:使用有业务含义的列作为主键(不推荐使用);
② 代理主键:使用没有业务含义的列作为主键(推荐使用);
5 查询操作-单表查询[常用]
查询操作就是从指定的数据库中查询出我们想要的数据,可以从单张表查询或者多张表联合查询,下面的查询都是单表查询。
首先我们准备好一个数据比较多表
5.1 简单查询
5.1.1 简单数据查询
语法:
SELECT {*, column [alias],...} FROM table_name;
说明:
SELECT 选择查询列表
FROM 提供数据源(表、视图或其他的数据源)
如果为 * 和创建表时的顺序一致。匹配所有的字段
可以自己调整顺序,在select后边加上要查询的列名。
需求:
查询所有货品信息
查询所有货品的id,productName,salePrice
5.1.2 消除结果中重复的数据。只对某一列有效
需求: 查询商品的分类编号。
语法: SELECT DISTINCT 列名,…
5.1.3 实现数学运算查询:
对NUMBER型数据可以使用算数操作符创建表达式(+ - * /)
对DATE型数据可以使用部分算数操作符创建表达式 (+ -)
运算符优先级:
乘法和除法的优先级高于加法和减法
同级运算的顺序是从左到右
表达式中使用"括号"可强行改变优先级的运算顺序
需求:
查询所有货品的id,名称和批发价(批发价=卖价*折扣)
查询所有货品的id,名称,和各进50个的成本价(成本=costPrice)
查询所有货品的id,名称,各进50个,并且每个运费1元的成本
5.1.4 设置列名的别名
1、改变列的标题头;
2、用于表示计算结果的含义;
3、作为列的别名;
4、如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都需加单引号;—>英文单词
需求:查询所有货品的id,名称,各进50个,并且每个运费1元的成本(使用别名)
5.1.5 设置显示格式:
为方便用户浏览查询的结果数据,有时需要设置显示格式,可以使用CONCAT函数来连接字符串。
需求:查询商品的名字和零售价。
格式:xxx商品的零售价为:xxx
SELECT CONCAT(productName,‘商品的零售价为:’,salePrice) AS productSalePrice FROM product;
5.2 过滤查询
5.2.1 比较运算符
语法
SELECT <selectList> FROM table_name WHERE 条件1 AND/OR 条件2;
需求:
查询货品零售价为119的所有货品信息.
查询货品名为罗技G9X的所有货品信息.
查询货品名 不为 罗技G9X的所有货品信息.
查询分类编号不等于2的货品信息
查询货品名称,零售价小于等于200的货品
查询id,货品名称,批发价大于350的货品
思考:使用where后面使用别名不行,总结select和where的执行顺序
注意:字符串和日期要用单引号扩起来.要让MySQL查询区分大小写,可以:
SELECT * FROM table_name WHERE BINARY productName='g9x' SELECT * FROM table_name WHERE BINARY productName='G9X'
javaweb实训第四天上午——MySQL基础(4)https://developer.aliyun.com/article/1414841?spm=a2c6h.13148508.setting.48.6e1a4f0eQzpjQW