Trung Tâm CNTT - Trường ĐHCN Tp.HCM BÀI 5: KIỂU DỮ LIỆU LÀM VIỆC VỚI BẢNG
5.1 Kiểu dữ liệu data type
Kiểu dữ liệu là một đặc tính của một cột Column. Nó định rõ loại dữ liệu và dạng dữ liệu được nhập vào cột. Có 2 nhóm: System-Supplied datatype: Các kiểu dữ liệu cơ bản được hỗ trợ bởi SQL Server. User-defined datatype: Các kiểu dữ liệu của người dùng tự định nghĩa dựa trên các kiểu dữ liệu cơ bản. 5.1.1 System-Supplied Datatype. System-Supplied Datatype là kiểu dữ liệu cơ bản được hỗ trợ bởi SQL Server. Các đối tượng lưu chứa dữ liệu đều có một kiểu dữ liệu để lưu, các đối tượng đó có thể là - Các cột Column trong các bảng. - Các tham số parameters trong strored procedures. - Các biến Variables trong stored procedure, function, script, batch. - Các hàm T_SQL trả về một hoặc nhiều giá trị thuộc một kiểu dữ liệu nào đó. Ta có thể dùng các kiểu dữ liệu để tạo các ràng buộc toàn vẹn dữ liệu. Ví dụ cột TENNV thì khơng thể được định nghĩa với kiểu dữ liệu là Date, vì cột Date chỉ chấp nhận giá trị ngày. Khi ta gán kiểu dữ liệu cho một đối tượng nào đó thì ta cần quan tâm đến các tính chất sau: - Loại dữ liệu được chứa đựng bởi đối tượng. - Chiều dài lưu trữ giá trị hoặc là kích cở của nó. - Tính đúng của số đối với các kiểu số. Các kiểu dữ liệu cơ bản: Loại Kiểu dữ liệu cơ sở Kích cở Vùng giá trị Mô tả Binary 8 KB 09, a..f, A..F Varbinary 8 KB 09, a..f, A..F Chứa các bit thông tin Binary Image 231 -1 bytes 231 1 bytes Dữ liệu hình ảnh Char 255 bytes 1..8000 ký tự Ký tự hoặc chuỗi Varchar 255 bytes 1..8000 ký tự Ký tự hoặc chuỗi Character Text 2147483647 bytes 231-1 ký tự 2147483647 Ký tự hoặc chuỗi Datetime 8 bytes 01011753-31129999 Chuỗi biểu diễn ngày giờ Date and Time Smalldatetime 4 bytes 111900 - 662079 Chuỗi biểu diễn ngày giờ Decimal 17 bytes -1038-1 - 1038-1 Số thực Decimal Numeric 17 bytes -1038-1 - 1038-1 Số thực Float 8 bytes -1.79E+308 - 1.79E+308 Số thực Foating point Real 4 bytes -3.40E+38 -3.40E+38 Số thực Integer Bigint 8 bytes -263 - 263 Số nguyên Trung Tâm CNTT - Trường ĐHCN Tp.HCM Int 4 bytes -231 - 231-1 Số nguyên Smallint 2 bytes -215 - 215-1 Số nguyên Tinyint 1 bytes 0..255 Số nguyên Money 8 bytes -263 - 263-1 Dữ liệu tiền tệ Monetary Smalmoney 4 bytes -214748.3648 - 214748.3648 Dữ liệu tiền tệ Bit 1 bytes 0 hoặc 1 Dữ liệu có một trong hai trạng thái 0 hoặc 1 Cursor Kiểu DL cho biến hoặc giá trị trả về của procedure, tham chiếu đến 1 mẫu tin Timestamp 8 bytes Chuỗi có dạng: 0x000000100000a90 Theo dõi mẫu tin nào bị thay đổi dữ liệu Uniqueidentifier 16 bytes Số thập lục phân SQL_variant Là kiểu dữ liệu có thể chứa bất kỳ loại dữ tùy ý của SQL Server ngoại trừ text, ntext, image, and the timestamp data type Special Table Nchar 4000 ký tự Ký tự hoặc chuỗi Nvarchar 4000 ký tự Ký tự hoặc chuỗi Unicode Ntext 230-1 ký tự Ký tự hoặc chuỗi 5.1.2 User-defined datatype. Người sử dụng có thể dựa yêu cầu cần lưu trữ và các kiểu dữ liệu cơ bản để định nghĩa ra một kiểu dữ liệu của người dùng dùng để lưu trữ một dữ liệu đặc biệt nào đó. SQL Sever cho phép bạn cải tiến các kiểu dữ liệu để đảm bảo tính nhất quán khi làm việc trong môi trường dữ liệu đa dạng trong các bảng hay các CSDL khác nhau. User-defined data type không cho phép bạn định nghĩa các kiểu dữ liệu phức hoặc có cấu trúc. Mỗi một User-defined data type có thể được định nghĩa riêng cho một CSDL hoặc cho toàn bộ các CSDL. Nếu User-defined data type được định nghĩa trong CSDL Master thì nó được dùng chung cho tồn bộ các CSDL. Các User-defined data type mà bạn tạo trong CSDL model thì sẽ có trong tất cả các CSDL mới tạo một cách tự động. Mỗi user-defined data type được lưu thành một mẫu tin trong bảng systypes. Bạn có thể tạo và xóa user-defined data type bằng các thủ tục hệ thống. Tên của kiểu dữ liệu phải tuân thủ qui tắt định danh và phải là duy nhất trong mỗi CSDL. Định nghĩa mỗi user-defined data type trong giới hạn của các kiểu dữ liệu cơ bản. Phải chỉ định mặc định là chấp nhận giá trị NULL hay NOT NULL khi đối tượng khơng có giá trị. Tạo một User-Defined Data Type Dùng thủ tục hệ thống sp_addtype để tạo một user-defined data type. sp_addtype type, system_data_type [,NULL | NOT NULL] Ví dụ 1: Tạo kiểu dữ liệu tên là isbn với kiểu dữ liệu cơ bản là smallint và không chấp nhận giá trị Null Trung Tâm CNTT - Trường ĐHCN Tp.HCM EXEC sp_addtype isbn, smallint, NOT NULL Ví dụ 2: Tạo kiểu dữ liệu tên là zipcode với kiểu dữ liệu cơ bản là char, độ dài tối đa là 10 và chấp nhận giá trị Null EXEC sp_addtype zipcode, char10, NULL Ví dụ 3: Tạo kiểu dữ liệu tên là longstring với kiểu dữ liệu cơ bản là varchar, độ dài tối đa là 63 và chấp nhận giá trị Null EXEC sp_addtype longstring, varchar63, NULL Xoá một User-Defined Data Type: dùng thủ tục hệ thống sp_droptype để xóa một user-defined data type từ bảng systypes. Một user-defined data type khơng thể xóa được nếu nó được tham chiếu bởi các bảng và những đối tượng khác. Sp_droptype type Ví dụ: EXEC sp_droptype isbn Xem các user-defined data types trong CSDL hiện hành: dùng thủ tục sp_help hoặc truy vấn trong information_schema.domains Ví dụ: Use SalesDB Sp_help hoặc SELECT domain_name, data_type, character_maximum_length FROM information_schema.domains ORDER BY domain_name