澳门美高梅游戏官方网站 > 澳门美高梅游戏 > 编制程序理论,2009从入门到明白

原标题:编制程序理论,2009从入门到明白

浏览次数:139 时间:2019-10-04

5.三大范式

美高梅app 1

摘要:

去除自定义准则

和自定义默许值对象同样,删除自定义准则须求该准则先与字段和自定义数据类型解绑。在上面的操作中,score_rule法则与自定义数据类型score_type以及列mt_score已绑定。因而施行以下语句:

EXEC sp_unbindrule 'score_type';
GO--解除规则score_rule与score_type之间的绑定
EXEC sp_unbindrule 'table_score.mt_score';
GO--解除规则score_rule与表table_score的mt_score列的绑定
DROP RULE score_rule;--删除score_rule规则

注:经过试验,一个列只好绑定1条法规,假如对贰个列绑定2条准绳,前一条法规会被后一条法则顶替。

pymysql的使用

引进模块

from pymysql import connect

SQL代表结构化查询语言,是一种在关周到据库系统中查询和治本数据的规范语言。sql语句也是有多少个门类,包蕴定义语言(DDL),数据操作语言(DML),数据调整语言(DCL)。

美高梅app 2


DEFAULT约束

经过定义列的暗中同意值或选用数据库的默许值对象绑定表列,来内定列的默许值。

Cursor游标对象

  • 获取Cursor对象

      # 调用Connection对象的cursor()方法    
      cur =conn.cursor()
    

目标: 试行sql语句(使用频度最高的讲话为select、insert、update、delete)

  • 利用游标试行SQL语句

execute(operation [, parameters ]) 试行SQL语句,重返受影响的行数,首要用来施行insert、update、delete语句,也足以执行create、alter、drop等说话

  • 闭馆游标 cur.close()
  • 赢得结果聚焦的一条

    cur.fetchone()回来贰个元组 形如 (1,'苏妲己',18)

  • 获得结果集中的有着

    cur.fetchall()推行查询时,获取结果集的保有行,一行构成二个元组,再将那个元组装入二个元组重临形如((1,'公孙离',20),(2,'己妲',18))

3.关系模型

删除:

例:
下文 首先使用 over() row_number 函数生成的行编号,
下一场对每行举办颜色变化操作,生成不一样的背景象,如下所示:

美高梅app,外关键字约束(Foreign Key Constraint)

概念了表之间的涉嫌,用来维护四个表之间的一致性的涉及。
在创建表时创设Foreign Key Constraint

CREATE TABLE table2(
    s_id VARCHAR(20),
    s_name VARCHAR(12),
    s_tellphone VARCHAR(11),
    s_address VARCHAR(20),
    CONSTRAINT PK_s_id PRIMARY KEY(s_id),
);--首先新建table2,设置s_id为主键

CREATE TABLE table1(
    t_id VARCHAR(12),
    s_id VARCHAR(20),
    score FLOAT,
    CONSTRAINT pk_ts_id PRIMARY KEY(t_id,s_id),--新建table1,对t_id和s_id设置联合主键,键名pk_ts_id
    CONSTRAINT fk_s_id FOREIGN KEY(s_id)--对s_id设置外键fk_s_id
    REFERENCES table2(s_id)--外键fk_s_id外键关联table2的列s_id
    ON DELETE CASCADE--设置在table1的s_id删除时table2的s_id同时删除
    ON UPDATE CASCADE--设置在table1的s_id更新时table2的s_id同时更新
);

注:对table1设置外键关联table2,在插入数据时要求先插入table2的数目,技巧成功插入table1的数码。更换table2.s_id数据,table1.s_id数据也会自动改造。但是改换table1.s_id数据,试行时报外键争辨。同理可得对table1设置外键关联table2后,table1的数额跟着table2走,不可能反着来。

丰裕和删除此之外键约束同主键。

参数化列表幸免SQL注入

怎么是SQL注入 产生原因: 后台将客户提交的带有恶意的数目和SQL进行字符串情势的拼凑,进而影响了SQL语句的语义,最终发生多少外泄的气象。 假如幸免: sql语句的参数化, 将SQL语句的具备数据参数存在三个列表中传递给execute函数的第1个参数

注意

* 此处不同于python的字符串格式化,必须全部使用%s占位
* 所有参数所需占位符外不需要加引号
from pymysql import connect

def main():

    find_name = input("请输入物品名称:")

    # 创建Connection连接
    conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8')
    # 获得Cursor对象
    cs1 = conn.cursor()


    # # 非安全的方式
    # # 输入 " or 1=1 or "   (双引号也要输入)
    # sql = 'select * from goods where name="%s"' % find_name
    # print("""sql===>%s<====""" % sql)
    # # 执行select语句,并返回受影响的行数:查询所有数据
    # count = cs1.execute(sql)

    # 安全的方式
    # 构造参数列表 
    params = [find_name]
    # 执行select语句,并返回受影响的行数:查询所有数据
    count = cs1.execute('select * from goods where name=%s', params)
    # 注意:
    # 如果要是有多个参数,需要进行参数化
    # 那么params = [数值1, 数值2....],此时sql语句中有多个%s即可 

    # 打印受影响的行数
    print(count)
    # 获取查询的结果
    # result = cs1.fetchone()
    result = cs1.fetchall()
    # 打印查询的结果
    print(result)
    # 关闭Cursor对象
    cs1.close()
    # 关闭Connection对象
    conn.close()

if __name__ == '__main__':
    main()

确定保证数量的一致性表示,最小化可能有冗余切不捐躯完整性

第一张表:

 

在建表时增添DEFAULT约束
CREATE TABLE table3(
    t3_id VARCHAR(12),
    t3_name VARCHAR(20),
    t3_class VARCHAR(12),
    t3_type VARCHAR(12) DEFAULT '类型1' 
)

 Python 中操作 MySQL 步骤

如何知道连接 connection 和 游标 cursor connection就像连接出发地和指标地的 高速公路cursor就如在高速路上的货车-拉货 我们应用游标就足以做到对数据的操作 当我们做到操作完毕后就能够告一段落货车,然后公路再结束使用。

2.谓词逻辑

修改页面

 

自定义准绳维护数据完整性

法规是对列或自定义数据类型的值的鲜明和界定。自定义法规的表明式一定要赶回布尔类型的值,何况表达式中不可能包涵多个变量。

CREATE RULE score_rule AS @math_score>=0;
GO--新建规则score_rule,参数@math_score
EXEC sp_addtype 'score_type','float','NULL';
GO--新建自定义数据类型score_type
CREATE TABLE table_score(--新建表table_score,预设mt_score和at_score字段用于绑定规则
s_id VARCHAR(4),
s_name VARCHAR(10),
mt_score float,--该字段将用于规则score_rule绑定到列
at_score score_type--该字段将用于规则score_rule绑定到自定义数据类型
);
GO
EXEC sp_bindrule 'score_rule','score_type';
GO--将score_rule规则绑定到自定义数据类型score_type
EXEC sp_bindrule 'score_rule','table_score.mt_score';
GO--将score_rule规则绑定到table_score表的mt_score列

----以下进行规则测试
INSERT INTO table_score(
s_id,
s_name,
mt_score,
at_score
)VALUES(
'0001',
'张华',
'-1',
'-1'
);
GO

开展违反准则的插入后,数据库报错
消息513,级别16,状态0,第1 行
列的插入或更新与在此以前的CREATE RULE 语句所钦赐的条条框框爆发冲突。该语句已终止。争辩发生于数据库'test',表'dbo.table_score',列'mt_score'。
言语已停止。
很明显,mt_score的插入值为-1,违反了亟须高于等于0的法则,数据库报错。将mt_score的插入值改成切合准则的多少,再一次运维插入语句,数据库照旧会报错,因为at_score字段的插入值也是反其道而行之法则的。将五个数据改成符合法规的归来,执行成功。

注:新建准则时表明式相对倘若回来布尔类型的值,不然会报错

消息4145,级别15,状态1,过程sum_score,第1 行
在应使用原则的上下文(在';' 周围)中内定了非布尔类型的表达式。

pymysql完结多少查询

import pymysql

# 创建和数据库服务器的连接 服务器地址   端口    用户名     密码  数据库名 通信使用字符和数据库字符集一致
conn = pymysql.connect(host='localhost', port=3306, user='root', password='mysql',database='python_test_1', charset='utf8')

# 获取游标
cursor = conn.cursor()

# 执行SQL语句 返回值就是SQL语句在执行过程中影响的行数
sql = """select * from hero;"""

row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)

# 取出结果集中一行  返回的结果是一行 (1, '妲己', 2)
# print(cursor.fetchone())

# 取出结果集中的所有数据  返回 ((一行数据),(),())
# ((1, '妲己', 2), (2, '李白', 1), (3, '程咬金', 3), (4, '亚瑟', 5), (5, '荆轲', 99))
for line in cursor.fetchall():
    print(line)

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

“互异”每三个成分必需唯一,三个体育地方里,人能够被感到是聚众,学生照旧体育场所都足以,因而根据选定分化剧中人物定义不相同的联谊。

美高梅app 3

转自:http://www.maomao365.com/?p=6679

查看自定义法则
EXEC sp_help 'score_rule';

结果如图所示
美高梅app 4

Connection 对象

  • 用于营造与数据库的接连 调用pymysql模块中的connect()方法
conn=connect(参数列表)

* 参数host:连接的mysql主机,如果本机是'localhost'
* 参数port:连接的mysql主机的端口,默认是3306
* 参数database:数据库的名称
* 参数user:连接的用户名
* 参数password:连接的密码
* 参数charset:通信采用的编码方式,推荐使用utf8
  • 关闭连接 conn.close()

  • 交给数据 conn.commit()

  • 打消数据 conn.rollback()

  • 经过连日获取游标 cur = conn.cursor()回来Cursor对象,用于施行sql语句并赢得结果

一个事件决断不是“真”就是“假” 但却并不能够管理全数景况。类似于 把顾客的手提式有线电话机号存入数据库字段“ml” 客商大概手提式有线电话机号退换 就意味着缺失也是第两种关系 对应 null 。

美高梅app 5

create table test(keyId int,info varchar(30))
go
insert into test(keyId,info)values(10,'测试信息20180625-1')
insert into test(keyId,info)values(20,'测试信息20180626-2')
insert into test(keyId,info)values(21,'测试信息20180628-3')
insert into test(keyId,info)values(81,'测试信息20180620-4')
insert into test(keyId,info)values(92,'测试信息20180608-5')
insert into test(keyId,info)values(101,'测试信息20180605-6')
insert into test(keyId,info)values(102,'测试信息20180606-7')
go


declare @tmp varchar(max)
set @tmp ='<table>'
set @tmp =@tmp+'<tr><td>流水号<td>keyId<td>info</tr>'

select 
@tmp=@tmp+'<tr style=''background-color:'+ case when t.[编号] %2=0 then 'blue' else '' end+'''>'
+'<td>'+ convert(varchar(100),t.[编号])
+'<td>'+ convert(varchar(100),t.keyId)
+'<td>'+t.info
+'</tr>'
from 
(
select row_number() over(order by keyId asc ) as [编号],
keyId,info from test ) as t 


set @tmp =@tmp+'</table>'
select @tmp ---打印生成的html信息 

go
drop table test 
加多封锁不钦赐约束名
ALTER TABLE table3
ADD DEFAULT '类型2' FOR t3_type;
GO

 数据库编程

从后边我们理解数据库概念包含数据库文件、服务器和数据库客户端 顾客端大家事先早就用过的有navicat/mysql-client等前后相继。

难点: 如何接纳顾客端将一千00行数据插入到数据库?

我们会发觉只要用事先客商端差相当少是不容许完全这一个职分的, 因为大家不容许去组织出特别插入10w行数据的SQL。不过,借使我们有一个效用能够插入一行数据,借助程序壮大的特点-重复,就足以毫不费力的就将10w行数据收入麾下。这种通过采纳程序代码的主意去老是数据库服务器,通过和服务器进行交互完毕对数据库的增加和删除改查的秘诀,就称为数据库编制程序。

而那时候攻读的pymysql便是一种客商端。

 1NF:表与行必需是为独一的,轻巧题说表正确的表示了涉及就相符第一范式。

美高梅app 6

下文将享受应用sql脚本输出交替转变的不等背景颜色的sql脚本的不二秘籍分享,如下所示:
实验情形:sqlserver 二〇〇九 奇骏2

累加Primary Key的另一种示例
ALTER TABLE Products
ADD PRIMARY KEY(prod_id);

固然上述代码运营没难题,查看表格设计也得以见见Primary Key设置成功,可是在剔除Primary Key操作时会提醒:
消息3728,级别16,状态1,第1 行
'prod_id' 不是封锁。
消息3727,级别16,状态0,第1 行
编制程序理论,2009从入门到明白。不许删除约束。请参阅前边的错误音讯。
缘由是丰盛Primary Key语句中从未用CONSTRAINT指明约束名,系统自动生成了主键名和平左券束名,要先查看主键名和平合同束名,删除时填写的也是封锁名。
这种情况的不错删除方法

ALTER TABLE Products
DROP CONSTRAINT CK__Products__prod_p__1A14E395;
ALTER TABLE Products
DROP CONSTRAINT PK__Products__56958AB222AA2996;

 


 3NF:满足第二范式 非主键属性不能够借助另外的非主键属性。

美高梅app 7

对列解绑私下认可值对象
USE test
GO
EXEC sp_unbindefault 'table3.t3_date1';

那儿我们重新尝试删除默许值对象,开采依然老大,此时要在意,在下面的操作中,暗中同意值对象date_today不唯有绑定了t3_date1列,还绑定了自定义数据类型date_time,并将该数据类型定义给了t3_date列,大家还索要对date_time解绑暗许值对象。

EXEC sp_unbindefault 'date_time';

此时重新删除默许值对象,就足以成功删除。删除默许值对象后,原先绑定的字段不会再有暗许值。

pymysql落成对数据库的增加和删除改

import pymysql

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='mysql',db='python_test_1', charset='utf8')

# 通过连接获取游标
cursor = conn.cursor()


# sql = "delete from hero where id = 5;"
# sql = insert into hero (name) values ('西部大坏蛋孙悟空');
sql = "update hero set kongfuid=444 where id = 4;"

row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)

# 提交数据到数据库
# conn.commit()

# 回滚数据到什么都不做的状态 即撤销刚刚的修改
conn.rollback()

# 关闭游标和连接
cursor.close()
conn.close()

关于提交commit commit将修改提交到数据库,保存修改

style="font-size: 14px">注意pymysql中数据要求手动提交commit技巧保留到数据库中

本文由澳门美高梅游戏官方网站发布于澳门美高梅游戏,转载请注明出处:编制程序理论,2009从入门到明白

关键词:

上一篇:没有了

下一篇:没有了