关系型数据库(结构化的数据)
结构化数据:每一列都有特定的含义,结构非常清晰,二维表结构是关系型数据库的核心。
总体上,对数据的操作基本上都支持CRUD,即Create、Retrieve、Update、Delete
三、一些数据库管理系统
ORACLE收购了Sun有两个至关重要的产品,第一个是Java。第二个是MySQL,都是开源社区里面及其重要的两个应用系统和底层的软件,所以欧盟对ORACLE收购Sun这件事做了严格的审计,确保 ORACLE承诺无论是否开发商业版本,都要有免费版本的授权,否则是不允许收购的。因为用MySQL和Java的人太多了,必须要考虑这种影响。
Sun在被ORACLE后,MySQL的原作者拉了一个分支出来叫MariaDB,内核都一样,功能都一样,95%都是一样的。Java社区版是OpenJdk。MySQL常用的版本是5.6或5.7。
三、关系型数据库
什么是关系?
关系型数据库加结构化查询语句
数据库定义语言DDL
在大多数的RDBMS中,我们可以使用如下简单的SQL语句,创建整个数据库:
CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARACTER set 'utf8mb4'];
#在SQL语句中 中括号 表示 可选
#[IF NOT EXISTS]参数表示当数据库不存在的时候才执行创建,如果存在的时候就不执行
#[CHARACTER set 'utf8mb4']
create database test character set 'utf8';
create database if not exists test character set 'utf8';
其中:数据库名在服务器中必须是唯一的,并且符合标识符规则。所谓标识符规则指:
语法:ALTER DATABASE db_name CHARACTER SET = charset_name
ALTER DATABASE db_name CHARACTER SET = UTF8MB4
语法:DROP DATABASE 数据库名;
DROP DATABASE school;
show databases;? ? ?#查看当前系统存在的数据库
use test;? ? ? ? ? ? ? ? #切换到test数据库
show tables;? ? ? ? ? ? #显示当前test数据库中的所有可用的表
desc school;? ? ? ? ? ?#显示当前test数据库中school表的结构
use mysql;? ? ? ? ? ? ? #切换到mysql核心数据库
select host,user,password from user;? ? #查询mysql数据库中的user表的三列数据
exit;? ? ? ? ? ? ? ? ? ? ? ? #退出MySQL命令行操作
CREATE TABLE 表名(
列名 数据类型 约束,
列名 数据类型 约束,
) [ENFINE = engine_name | [DEFAULT] CHARACTER SET [=] charset_name];
其中,表名在一个数据库中必须是唯一的,并且符合标识符规则,列名在一个表中必须是唯一的,并且符合标识符规????????则,列的数据类型决定了什么样的数据可以存储在列中,而列的约束定义了创建列时的限制条件。MySQL引擎类型有InnoDB和MylSAM两种。建议使用功能innoDB,功能更加强大,但是执行效率会稍低。
在建表时要根据实际情况考虑表的列的数据类型和约束:
序号id INT
学号sid:13位? ? ? ? 15位的变长字符串? ? ? ?varchar(15)
姓名sname:varchar(10)
电话号码:sphone:varchar(11)
性别sex 定长字符串 char(1)
年龄sage:tinyint
创建时间createtime? ?datatime
数据字典是?用于描述关系表结构和组成的字典表,通常用于数据库设计工作中,如:
SHOW TABLES;
DESC <表名> #查看表的结构
修改数据表表名:
#语法如下:
#ALTER TABLE 表名 RENAME TO 新表名;
#举例:
ALTER TABLE address_info RENAME TO addr_info;
添加字段:
#语法:
#ALTER TABLE 表名 ADD [COLUMN] 列名 列的定义
#举例
ALTER TABLE stu_info ADD age int;
修改字段:
#语法:
ALTER TABLE 表名 CHANGE [COLUMNE] 旧列名 新列名 列的定义;
#举例:
ALTER TABLE stu_info CHANGE address addr varchar(50);
修改字段类型 :
#语法:
ALTER TABLE 表名 MODIFY [COLUMNE] 列名 列的定义;
#举例:
ALTER TABLE stu_info MODIFY stu_info addr varchar(255);
删除字段:
#语法:
ALTER TABLE 表名 DROP [COLUMNE] 列名;
#举例:
ALTER TABLE stu_info DROP addr;
#语法:
DROP TABLE 表名;
#举例:
DROP TABLE stu_info;
针对列名或表名,可以通过添加" ` "来进行区分
#针对列名或表名,可以通过添加" ` "来进行区分
INSERT INTO student(sid, sname, phone, sex, age, degree, createtime)
VALUES (XXAN3005 荔枝 13533066789 女?18 本科 2023-0820 16:00:30);
INSERT INTO student(sid, sname, phone, sex, age, degree, createtime)
VALUES (`XXAN3005`, `荔枝`, `13533066789`, `女`, 18, `本科`, `2023-0820 16:00:30`);
?如果在插入数据时每一列都要插入数据则可以省略列名,如果是部分列插入数据则必须指定列名
#如果在插入数据是每一列都要插入数据则可以省略列名
INSERT INTO VALUES (`XXAN3006`, `杨梅`, `1353366789`, `女`, 18, `本科`, `2023-0820 15:00:30`);
#如果是部分列插入数据则必须指定列名
INSERT INTO student(sid, sname) VALUES (`XXAN3005`, `程橙`);
如果要插入数据,一次插如多行,可以写多条INSERT语句
INSERT INTO student(sid, sname, phone, sex, age, degree, createtime)
VALUES (`XXAN3005`, `毛毛`, `13533066785`, `女`, 18, `本科`, `2023-0820 13:00:30`);
INSERT INTO student(sid, sname, phone, sex, age, degree, createtime)
VALUES (`XXAN3005`, `花花`, `13533066786`, `女`, 18, `本科`, `2023-0820 14:00:30`);
INSERT INTO student(sid, sname, phone, sex, age, degree, createtime)
VALUES (`XXAN3005`, `小小`, `13533066787`, `女`, 18, `本科`, `2023-0820 15:00:30`);
INSERT INTO student(sid, sname, phone, sex, age, degree, createtime)
VALUES (`XXAN3005`, `豆豆`, `13533066788`, `女`, 18, `本科`, `2023-0820 16:00:30`);
标准的批量插入:
INSERT INTO student(sid, sname, phone, sex, age, degree, createtime)
VALUES (`XXAN3005`, `毛毛`, `13533066785`, `女`, 18, `本科`, `2023-0820 13:00:30`),
(`XXAN3005`, `花花`, `13533066786`, `女`, 18, `本科`, `2023-0820 14:00:30`),
(`XXAN3005`, `小小`, `13533066787`, `女`, 18, `本科`, `2023-0820 15:00:30`),
(`XXAN3005`, `豆豆`, `13533066788`, `女`, 18, `本科`, `2023-0820 16:00:30`);
TRUNCATE TABLE student;? ? ? ? ? ? ? ? ? #清空表数据
DELETE FROM student;? ? ? ? ? ? ? ? ? ? #删除表数据,可以带WHERE条件决定删除哪些行
DELETE FROM student WHERE sid='XXAN3005';
???????DELETE FROM student WHERE not in(sid='XXAN3005',?sid='XXAN3006');
UPDATE student SET 'sname'='张三' WHERE sid=`XXAN3007`
UTF-8格式对全球文字进行统一编码
ASCII码:ISO-8859-1,ASCII码是由1byte来进行编码,1byte=8bit,表示有8个二进制位,0000 0000 ~ 1111 1111 对应0~255,最多可以表示256个字符。平时我们键盘上见到的这些字符是标准的ASCII字符,128个字符
把128~255组成扩展的ASCII表,绝大部分的欧美文字都可以表示,但是唯独没有亚洲文字,比如中文、韩文、蒙古文是不能表示的。
1、数值型
类型 | 大小? | 范围(有符号) | 范围(无符号) | 用途 |
TINYINT | 1byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | ?2bytes? | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | ?3bytes? | (-8388608,8388607) | (0,2^24-1) | 大整数值 |
INT或INTEGER | ?4bytes? | (-2^31,2^31-1) | (0,2^32-1)? | 大整数值 |
BIGINT | 8bytes | ?(-2^63,2^63-1)? | (0,2^63) | 大整数值 |
FLOAT? | ?4bytes? | —— | —— | 单精度浮点数值 |
DOUBLE? | 8bytes | —— | —— | 双精度浮点值 |
DECIMAL? ? ? ? | —— | —— | —— | 小数值 |
2、字符型
CHARE? ? ? ? ?0-255bytes? ? ? ? ? 定长字符串
VARCHAR? ?0-65535bytes? ? ? ?不定长字符串
3、日期和时间
最常用的是DATETIME表示日期时间,格式是YYYY-MM-DD-HH:MM:SS
DATETIME????????YYYY-MM-DD-HH:MM:SS
DATE? ? ? ? ? ? ? ?YYYY-MM-DD
TIME? ? ? ? ? ? ? ??HH:MM:SS
YEAR? ? ? ? ? ? ? ? YYYY
TIMESTAMP? ?uninux元年开始的时间