数据库笔记10:插入数据 创建和操纵表

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

第二十章 插入数据

 

INSERT是用来插入(或添加)行到数据库表的。插入数据的几种方式:

1  插入完整的行

插入行的一部分

3  插入多行

插入某些查询结果

INSERT SELECT语句

INSERT INTO customers(cust_id,cust_name,cust_email) 

SELECT cust_id,cust_name,cust_email FROM custnew;

列省略

  如果表中定义允许,则可以在INSERT操作中省略某些列,省略的列必须满足以下某个条件。

该列定义为允许为NULL

在表定义中给出默认值,

 

提高整体性能

   数据库经常多个客户访问,对处理什么请求以及用什么次序处理进行管理mysql的任务。INSERT操作可能很耗时(特别是由很多索引需要更新时),而且它可能降低等待处理的SELECT语句性能。

   如果数据检索是最重要的(通常是这样的),则你可以通过在INSERT INTO之间添加关键字 LOW_PRIORITY 指示mysql降低INSERT语句的优先集

 

更新和删除数据

 

   为了更新(修该)表中的数据,可使用UPDATE语句,可采用两种方式使用UPDATE

更新表中特定的行

更新表中所有的行

更新行和删除行的时候一定要加上WHERE子句,否则后果自负

UPDATE bname SET zda = 'acontent' , zdb = 'bcontent' WHERE zdid='20005';

   IGNORE 关键字    如果使用UPDATE更新多行,并且在更新这些行中的一行或多行时出现一个错误,则整个UPDATE操作被取消,(错误发生前更新的所有行被恢复到他们原来的值)为即使发生错误也继续进行更新。可使用IGNORE关键字

UPDATE  IGNORE bname;

 

删除数据

为了从表中删除(去掉)数据,使用DELETE语句,可以使用两种方式:

     1 从表中删除特定的行

从表中删除所有的行

   不要省略WHERE子句

 

   更快的删除  如果想从表中删除所有的行,不要使用DELETE,可以使用TRUNCATE TABLE语句,他完成相同的工作,但速度更快(TRUNCATE实际上是删除原来的表并重新创建一个表,而不是逐行去删除表中的数据)

 

更新和删除的指导原则

下面是许多sql程序员使用的UPDATEDELETE是所遵循的习惯

      除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATEDELETE语句。

      保证每个表都有主键,尽可能的像WHERE子句那样使用它(可以指定各主键、多个值、和值的范围)

      在对UPDATEDELETE语句操作使用WHERE前,应该先用SELECT进行测试,保证它过滤的数据是正确的记录,以防编写的WHERE子句不正确。

      使用强制实施引用完整的数据库,这样MYSQL将不允许删除具有与其他表相关联的数据的行

 

 

第二十一章  创建和操纵表

创建表

一般两种创建表的方法

使用具有交互式创建和管理表的工具

表也可以直接用MySQL语句操纵

在使用交互式工具时,工具也是生成MySQL语句操纵数据库

表创建基础

为了利用CREATE TABLE创建表,必须给出下列信息:

新表的名字,在关键字CREATE TABLE之后给出

表列的名字和定义,用逗号分隔

CREATE TABLE table

(

column_id  int       NOT NULL  AUTO_INCRMENT,

columnOne  char(20)  NOT NULL  DEFAULT 1,

columnOne  char(20)  NOT NULL ,

column  char(20)  NOT NULL ,

.....

PRIMARY  KEY ( column_id)

ENGINE =  InnoDB

   如果表已经存在,则必须先删除后在创建他,不可以直接覆盖。如果仅想在表没有存在的情况下创建它,应该在表名后给出 IF NOT EXISTS

使用NULL  如果不指定列为NOT NULL则它默认是NULL

主键再介绍  主键的值必须是唯一的。创建主键时可以用单列做主键PRIMARY KEY(columnOne,columnTwo),也可以使用多列做主键PRIMARY KEY(columnOne,columnTwo).主键值不允许为NULL

索引创建

   CREATEINDEX indexname ON tablename(column [ASC|DESC],....);

使用AUTO_INCREMENT

   每个表只允许使用一个AUTO_INCREMENT列,而且它必须被索引,(如通过使它为主键)

如果两个表关联,添加时一表时需要另一表的主键,该怎么获得呢:

   可以使用last_insert_id()函数获得这个值 此语句返回最后一个AUTO_CREMENT的值。

指定默认值

   如果在插入行时没有给出值,mysql允许指定此时使用默认值。默认值是在CREATE TABLE语句的列定义中的DEFAULT关键字定义的。

      columnOne  char(20)  NOT NULL  DEFAULT 1,

MySQL不允许使用函数作为默认值,它只支持常量

引擎搜索

   你可能已经注意到,迄今为止使用的CREATE  TABLE语句全都以ENGINE = InnoDB语句结束

   与其他的DBMS一样,MySQL有一个具体管理和处理数据的内部引擎,在你使用CREATE TABLE语句是,该引擎具体创建表,在其他应用中区修改读取删除表等处理你的请求,多数时候它隐藏在DBMS内,不需要过多的关注它。

   但MySQL与其他的DBMS不一样,它具有多种引擎,它打包多个引擎,这些引擎都隐藏在MySQL服务器内,全都能处理用户的请求。

   为什么要发行多种引擎呢,因为他们具有各自不同的功能和特性,为了不同的任务选择正确的引擎能获得良好的功能和灵活性

   当然你也可以省略这些数据库引擎,如果省略ENGINE=语句,则使用默认引擎(很可能为MyISAM),多数sql语句都会默认使用它,但并不是所有的语句都默认使用它,这就是为什么ENGINE=语句很重要的原因。

以下几个需要知道的引擎

1 InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索。

   2 MEMORY 在功能上等同于MySAM,但由于数据存储在内存,所以速度更快(特别适用于临时表)

   3 MySAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理

      引擎类型可以混用。混用引擎类型的一个大缺陷。外键不能跨引擎,即使用一个引擎的表不能引用具有使用不同引擎的表的外键

更新表

      为了更新表,可以使用ALTER TABLE语句,但是在理想状态下,当表中存储了数据后就不应该再去更新表了。所以在设计表时需要花费大量的时间去考虑,以便后期不做太大的改动。

   ALERT TABLE更改表结构,必须给出下面的信息:

   ALERT  TABLE之后给出要修改的表名

   所做更改的列表

   添加一列 ALERT TABLE column ADD columnFour CHAR(90);必须指明数据类型

   删除一列 ALERT TABLE column DORP columnFour ;

      定义外键   

         ALERT TABLE tableOne ADD CONSTRAINT columnOne 

         FOREIGN KEY (column_id) PEFERENCES tableTwo (column_id)

      可以单条ALTER TABLE语句对单个表进行多个修改,每个修改用逗号分隔开。

   复杂的表结构一般需要手动删除过程

      1 用新的列布局创建一个新表

       2 使用INSERT SELECT 语句从旧表复制数据当道新表。如果有必要,可以使用转换函数和计算字段

      检验包含所需数据的新表

      重名名旧表

      用旧表原来的名字重命名新表

      根据需要,重新创建触发器、存储过程、索引和外键

      小心使用ALTER TABLE 因为它是不可逆的操作,最好操作前完成已备份。

   删除表

      DORP TABLE table;   不可撤销,永久删除表

   重命名表

      RENAME TABLE table TO table2;  多个表重命名 逗号分隔开


 

CREATE DATABSE [IF NOT EXISTS] dataname;

DORP DATABSES [IF EXISTS] databses;

 

在整型数据列后加上 UNSIGNED 属性可禁止负数,取值从0开始。范围扩大一倍-125---125  0-250

ZEROFILL  数据字段属性,在数值之前自动用0补足不足的位数,声明一个int3ZEROFILL插入返回005

CREATE TABLE tablename(

Id int(5) UNSIGNED.......

Num ind(3) ZEROFILL....

Sex  int(1)  DEFAULT 0 ......

Name varchar(10) NOT NULL......

)

Mysql默认字符集设置win my.ini    linux   /etc/my.cnf

Character-set-server = gbk;

Collation-server=gbk_chinese_ci;

创建数据库时设置字符集语句:

CREATE DATABASE IF NOT mydb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

数据库文件结构

一个MyISAM数据表会有三个文件,以.frm为后缀的结构定义文件,以.MYD为后缀名的数据文件,一个以.MYI为后缀名的索引文件

一个InnoDB数据表只有一个文件

CREATE TABLE t (i INT) ENGINE = INNODB;

CREATE TABLE t (i INT) TYPE = MYISAM;

 

Mysql_db_query(''sql........,$linke)  当文件连接两个数据库时指定在哪个数据库上执行

query函数出错时可以用mysql_errno()【错误号】和mysql_error()函数来确定

query函数执行后可以使用mysql_affected_rows()来查看他们到底修改了多少行

还可以mysql_insert_id()查看最后插入的自增字段(id)值

查询结果集处理

$result = mysql_query(select * from books);

$rows= mysql_num_rows($result);  显示结果的行数

$cols = mysql_num_fields($result);显示结果的列数

 

Mysql_fetch_row();将一条结果记录返回并以一个普通索引数组的形式保存

Mysql_fetch_assoc();将一条结果记录返回并以一个普通关联数组的形式保存

Mysql_fetch_array();将一条结果记录返回一个关联数组或索引数组,或同同时获得索引关联数组,通过传递MYSQL_ASSOC MYSQL_NUM MYSQL_BOTH中的一个常量返回不同的数组形态。默认使用MYSQL_BOTH常量

Mysql_fetch_object(); 以一个对象的形式返回一条结果记录,它的各个记录需要以对象的方式进行访问。

获取列数信息(数据类型,长度,索引)  mysql_fetch_fields()

php默认把结果集一直保存到php脚本执行结束为止,如果想提前释放结果集,使用mysql_free_result()函数。


本文转自    风雨萧条 博客,原文链接:  http://blog.51cto.com/1095221645/1545906      如需转载请自行联系原作者


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
2月前
|
关系型数据库 MySQL 数据库
ORM对mysql数据库中数据进行操作报错解决
ORM对mysql数据库中数据进行操作报错解决
85 2
|
23天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
72 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
21天前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
28天前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
|
1月前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
92 3
|
2月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
2月前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
1月前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
1月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
233 4
下一篇
无影云桌面