首页 > 数据库 >数据库基础操作 - 1

数据库基础操作 - 1

时间:2023-02-07 13:33:08浏览次数:42  
标签:COMMENT -- 数据库 基础 DEFAULT student 操作 NULL

1、连接数据库

mysql -u root -p123456  -- 连接数据

update mysql.user set authentication_string=password('admin') where user='root' and Host = 'localhost'; -- 修改用户密码

flush privileges;  -- 刷新权限

----------------------------------------------------
-- 所有的语句都使用《;》结尾
show databases;  -- 查看全部数据库

mysql> use school -- 切换数据库 : use 数据库名
Database changed  -- 提示成功

mysql> show tables; -- 查看数据库中所有的表

mysql> describe student; -- 显示数据库中所有的表信息 : describe 表名

mysql> create database westos; -- 创建一个数据库:create database 数据库名

exit --退出连接

-- 单行注释(SQL的本来注释)
/* SQL的多行注释 */

 

数据库xxx语言 CURD 增删改查

DDL 定义

DML 操作

DQL 查询

DCL 控制

 

2、操作数据库

操作数据库>操作数据库中的表>操作数据库中表的数据

mysql关键字不区分大小写

2.1、操作数据库

1、创建数据库

CREATE DATABASE [IF NOT EXISTS] westos;  -- []中视情况为可选内容

 

2、删除数据库

DROP DATABASE [IF EXISTS] westos;

 

3、使用数据库

-- 如果表名或者字段名是一个特殊字符,就需要带``
USE `school`;

 

4、查看数据库

SHOW DATABASES;  -- 查看所有的数据库

学习思路:

  • 对比:SQLyog的可视化操作

  • 固定的语法或关键字必须要记住!

2.2、数据库的列类型

数值

  • tinyint 十分小的数据 1个字节

  • smallint 较小的数据 2个字节

  • mudiumint 中等大小的数据 3个字节

  • int 标准的整数 4个字节 常用

  • bigint 较大的数据 8个字节

  • float 浮点数 4个字节

  • double 浮点数 8个字节(精度问题!)

  • decimal 字符串形式的浮点数 金融计算的时候,一般是使用decimal

字符串

  • char 字符串固定大小的 0-255

  • varcahr 可变字符串 0-65535 相当于java中常用的String

  • tinytext 微型文本 2^8 - 1

  • text 文本串 2^16 - 1 保存大文本

时间日期

java.util.Date(java中的类)

  • date yyyy-MM-dd,日期格式

  • time HH:mm:ss,时间格式

  • datetime yyyy-MM-dd HH:mm:ss 最常用的时间格式

  • timestamp 时间戳 1970.1.1 到现在的毫秒数! 也较为常用

  • year 年份表示

null

  • 没有值/未知

  • 注意,不要使用NULL进行运算,结果为NULL

 

2.3、数据库的字段属性(重点)

Unsigned:

  • 无符号的整数

  • 声明了该列不能声明为负数

zerofill:

  • 0填充

  • 不足的位数,使用0来填充:int(3) , 5 ---> 005

自增:

  • 通常理解为自增,自动在上一条记录的基础上+1(默认)

  • 通常用来设计唯一的主键~index,必须是整数类型

  • 可以自定义设计主键自增的起始值和步长

非空: null 和 not null

  • 假设设置为 not null,如果不给它赋值,就会报错

  • null,如果不填写值,默认就是null

默认:

  • 设置默认的值

  • sex,默认值为 男 ,如果不指定该列的值,则会有默认的值

 

拓展:

/*  每个表,必须存在以下五个字段。未来做项目用的,表示一个记录存在的意义
id 主键
‘version’ 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间
*/

 

2.4、创建数据库表(重点)

-- 注意点:使用英文(),表的名称 和 字段 尽量使用``括起来
-- AUTO_INCREMENT 自增
-- 字符串使用''括起来
-- 所有的语句后面加','英文的分号。最后一个不用加
-- PRIMARY KEY 主键,一般一个表只有一个唯一的主键
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

 

格式

CREATE TABLE [IF NOT EXISTS] `表名`(
'字段名' 列类型[属性][索引][注释],
   '字段名' 列类型[属性][索引][注释],
  ......
   '字段名' 列类型[属性][索引][注释]
)[表类型][字符集设置][注释]

常用命令

SHOW CREATE DATABASE school -- 查看创建数据库的语句
SHOW CREATE TABLE student -- 查看student数据表的定义语句
DESC(RIBE) student -- 显示表的结构

2.5、数据表的类型

 

-- 关于数据库引擎
/*
INNODB 默认使用
MYISAM 早些年使用的
*/
 MYISAMINNODB
事务支持 不支持 支持
数据行锁定 不支持(表锁) 支持(行锁)
外键约束 不支持 支持
全文索引 支持 不支持
表空间的大小 较小 较大,约为MYISAM的2倍

常会使用操作:

  • MYISAM 节约空间,速度较快

  • INNODB 安全性高,事务的处理,多表多用户操作

 

在物理空间存在的位置

所有的数据库文件都存在data目录下,一个文件夹就对应一个数据库

本质还是文件的存储

 

MySQL 引擎在物理文件上的区别

  • InnoDB: 在数据库表中只有一个*.frm,以及上级目录下的ibdata1文件

  • MYISAM对应文件

    • *.frm - 表结构的定义文件

    • *.MYD - 数据文件(data)

    • *.MYI - 索引文件(index)

 

设置数据库表的字符集编码

CHARSET=utf8

不设置的话,会是mysql默认的字符集编码~(不支持中文!)

MySQL的默认编码是Latin1,不支持中文

 

在my.ini中配置默认的编码

character-set-server=utf8

 

2.6、修改删除表

修改

-- 修改表    ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE teacher RENAME AS teacher1

-- 增加表的字段 ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE teacher1 ADD age INT(4)

-- 修改表的字段(重命名,修改约束!)
ALTER TABLE teacher1 MODIFY age VARCHAR(11); -- 修改约束
ALTER TABLE teacher1 CHANGE age age1 INT(4); -- 字段重命名

-- 删除表的字段
ALTER TABLE teacher1 DROP age1;

 

删除

-- 删除表
DROP TABLE IF EXISTS teacher1;

所有的创建和删除操作尽量加上判断,以免报错

 

注意点:

  • 所有的字段名,使用``包裹

  • 注释 -- /**/

  • sql关键字大小写不敏感,建议大家写小写

  • 所有的符号全部用英文

 

3、MySQL数据管理

3.1、外键(了解即可)

方式一:在创建表的时候,增加约束(麻烦,比较复杂)

CREATE TABLE `grade` (
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 学生表的 gradeid 字段,要去引用年级表的 gradeid
-- 定义外键key
-- 给这个外键添加约束(执行引用) references 引用
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`gradeid` INT(10) NOT NULL DEFAULT 0 COMMENT '学生的年级',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`),
KEY `FK_gradeid`(`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

 

方式二:创建表成功后,添加外键约束

-- 创建表的时候没有外键关系
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)

 

以上操作都是物理外键,数据库级别的外键,我们不建议使用(避免数据库过多造成困扰,这里了解即可)

 

最佳实践

  • 数据库就是单纯的表,是用来存数据,只有行(数据)和列(字段)

  • 我们像使用多张表的数据,想使用外键(程序去实现)

3.2、DML语言(全部记住)

数据库的意义:数据存储、数据管理

DML语言:数据操作语言

  • insert

  • update

  • delete

3.3、添加

insert

-- 插入语句(添加)
-- insert into 表名([字段名1,字段2,字段3])values('值1'),('值2'),('值3'),(....)
INSERT INTO `grade`(`gradename`) VALUES ('大四')

-- 由于主键自增,我们可以省略(如果不写表的字段,他就会一一匹配)
INSERT INTO `grade` VALUES ('大三');

-- 一般写插入语句,我们一定要数据和字段一一对应。

-- 插入多个字段
INSERT INTO `grade` (`gradename`) VALUES ('大二'),('大一');

INSERT INTO `student` (`name`) VALUES ('张三')

INSERT INTO `student`(`name`,`pwd`,`sex`) VALUES ('李四','aaaaaa','男')

INSERT INTO `student`(`name`,`pwd`,`sex`) VALUES
('张三','ABCABC','男'),('王五','abeabe','男')

语法:insert into 表名([字段名1,字段2,字段3,...])values('值1'),('值2'),('值3'),(....)

注意事项:

1.字段和字段之间使用 英文逗号 隔开

2.字段是可以省略的,但是后面的值必须要一一对应,不能少(包括自增项)

INSERT INTO `student` VALUES 
(5,'李四','aaaaaa','男','2000-01-01',1,'西安','email')

 

3.可以同时插入多条数据,VALUES后面的值,需要使用‘,’隔开即可:

values('值1'),('值2'),('值3'),(....)

3.4、修改

update 修改(条件) set原来的值 = 新值

-- []内容为可选
-- 修改学员名字(带了条件)
UPDATE `student` SET `name` = '狂神' WHERE id = 1;

-- 不指定条件的情况下,会改动所有的值
UPDATE `student` SET `name` = '长江7号';

-- 语法:
-- 修改多个属性‘,’隔开
-- UPDATE 表名 SET colnum_name = value[,colnum_name = value] [WHERE 条件]

条件:where子句 运算符 id等于某个值,大于某个值,在某个区间内…

操作符会返回 布尔值

操作符含义范围结果
= 等于 5=6 false
<>或!= 不等于 5<>6 true
> 大于    
< 小于    
>= 大于等于    
<= 小于等于    
between...and... 在某个范围内 [2,5]  
and 和 && 5>1and1>2 false
or 或 || 5>1or1>2 true

 

-- 不指定条件的情况下,会改动所有的值
UPDATE `student` SET `name` = '长江7号';

-- 修改多个属性‘,’隔开
UPDATE `student` SET `name` = '狂神',`email`='[email protected]' WHERE id = 1;

-- 通过多个条件定位数据
UPDATE `student` SET `name`='长江6号' WHERE `name`='长江7号' AND `sex`='女';

注意:

  • colnum_name 是数据库的列,尽量带上``

  • 条件:筛选的条件,如果没有指定,则会修改所有的列

  • value,是一个具体的值,也可以是一个变量

  • 多个设置的属性之间,使用英文‘,’逗号隔开

3.5、删除

delete命令

语法:delete from 表名 [where 条件]

-- 删除数据(避免这样写,会全部删除)
DELETE FROM `student`

-- 删除指定数据
DELETE FROM `student` WHERE `id`=1;

 

TRUNCATE 命令

作用:完全清空一个数据库表,表的结构和索引约束不会变

-- 清空:TRUNCATE 表名
TRUNCATE `student`

 

DELETE 和 TURNCATE 区别

  • 相同点:都能删除数据,都不会删除表结构

  • 不同:

    • TRUNCATE 重新设置 自增列 计数器会归零

    • TRUNCATE 不会影响事物

-- 测试delete 和 turncate 区别
CREATE TABLE `test`(
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE = INNODB DEFAULT CHARSET=utf8

INSERT INTO `test` (`coll`) VALUES ('1'),('2'),('3');

DELETE FROM `test` -- 不会影响自增

TRUNCATE TABLE `test` -- 自增会归零

拓展:DELETE删除的问题,重启数据库的现象:

  • InnoDB 自增列会从1开始(存在内存当中的,断点即失)

  • MYISAM 继续从上一个自增量开始(存在文件中的,不会丢失)

标签:COMMENT,--,数据库,基础,DEFAULT,student,操作,NULL
From: https://www.cnblogs.com/jiaxing-java/p/17098068.html

相关文章

  • 如何在SQL Server 2017中实现图形数据库
    所谓图形数据库并不是存储图片的数据库,而是基于“图论”的对象与关系。只有两种类型的表(点和线)节点表:节点表定义图模型中的实体。边缘表:边缘表定义节点表实体之间的连接查......
  • “Linux 基础入门(新版) 挑战:寻找文件
    实验报告地址:​​https://www.shiyanlou.com/courses/reports/1340992​​“Linux基础入门(新版)”实验报告​​挑战:寻找文件​​寻找文件介绍有一个非常重要的文件(sourc......
  • Java基础-反射
    Class类对象的获取根据类名:类名.class根据对象:对象.getClass()根据全限定类名:Class.forName(全限定类名)例子interfaceI1{}interfaceI2{}classCell{......
  • 文件操作
    1. 遍历目录---不递归 importosforroot,dirs,filesinos.walk(dir): fornameinfiles:   print(os.path.join(root,name))fornameindirs:......
  • 使用SQL管理数据库
          ......
  • 9.2要意识到操作系统的存在
    制作应用的程序员们意识到一点:那就是你们制作的不是硬件,而是利用操作系统功能的应用。 下面就来看一下操作系统是如何给开发人员带来便利的。代码清单9-1表示的是,在Win......
  • Mysql基础知识
    查看mysql数据库存放位置showvariableslike'datadir';可以看到,共有三个文件,这三个文件分别代表着:db.opt,用来存储当前数据库的默认字符集和字符校验规则。t_or......
  • 最小化CentOS安装基础命令
    yum-yinstallwgetvimnet-toolszipunziplsoflrzszlsofbridge-utilstree\gccgcc-c++automakepcrepcre-develzlibzlib-devel\nt......
  • OushuDB 数据库基本用法(中)
    1、概述一个OushuDB集群管理着多个数据库(database),每个数据库又包含多个模式(schema),一个模式包含多个对象(表,视图,函数等),所以这些对象之间的层级结构为:database->schema->......
  • OushuDB数据库基本用法(下)
    一个数据库包含多个模式(schema),而一个模式可以包含多种命名对象,比如表,数据类型,函数,操作符等。同一个对象名字可以用在不同的模式中而不产生冲突。比如schema1中可以包含表tes......